仅个人想法,会持续不间断更新和改进。
Linux系统中的数据处理,可搜索,需排序、减重复。
Linux grep
命令用于查找文件里符合条件的字符串。
官方定义为:
grep
,egrep
,fgrep
- print lines matching a pattern
grep支持正则表达式,是一个强大的文本搜索工具。
语法也挺复杂,因为功能确实很强大。
$ grep [OPTION...] PATTERNS [FILE...]
$ grep [OPTION...] -e PATTERNS ... [FILE...] # 使用egrep
$ grep [OPTION...] -f PATTERN_FILE ... [FILE...] # 使用fgrep
常用的参数为:
假定有如下3个文件,1个文件夹,内容如下:
a
This is a
Hello a
b
this is b
Hello b
c
This is c
Hello c
d/d
This is d
Hello d
在当前目录搜索包含is字符串,可以看到**a/b/c**三个文件均有输出,而d因为是目录,暂时无输出。
$ grep is *
a:This is a
b:this is b
c:This is c
grep: d: Is a directory
与其他命令类似,增加-r
参数,递归搜索
$ grep -r is *
a:This is a
b:this is b
c:This is c
d/d:This is d
在某些情况下,或许正想找到不包含某些字符串的内容,如下:
$ grep -rv is *
a:Hello a
b:Hello b
c:Hello c
d/d:Hello d
此时可以看到,不包含is的内容显示了出来。
而某些情况下,或许我们希望找到不区分大小写的内容,比如对于This/this而言:
$ grep -r This *
a:This is a
c:This is c
d/d:This is d
$ grep -ri This *
a:This is a
b:this is b
c:This is c
d/d:This is d
可以看到此时有可能笔误,或者其他原因的b文件已经被找到了。
如果文件内容比较多,此时显示内容在哪一行,是很重要的,加上-n
参数既可解决。
$ grep -rn This *
a:1:This is a
c:1:This is c
d/d:1:This is d
Linux sort
命令用于将文本内容进行排序。
官方定义为:
sort
- sort lines of text files
$ sort [OPTION]... [FILE]...
$ sort [OPTION]... --files0-from=F
常用的参数为:
-c
检查文件是否已经按照顺序排序。-u
意味着是唯一的(unique),输出的结果是去完重了的。-r
以相反的顺序来排序。-k field1[,field2]
按指定的列进行排序。这里假定测试文件名为testfile:
LiSi 80
ZhangSan 70
WangWu 90
MaLiu 88
在使用 sort
命令以默认的式对文件的行进行排序,命令如下:
$ sort testfile
LiSi 80
MaLiu 88
WangWu 90
ZhangSan 70
sort
命令默认情况下将第一列以 ASCII 码的次序排列,并将结果输出到标准输出。
对于测试文件而言,或许我们更希望使用数字来统计排序,此时可以使用-k N
参数,其中N为列数
$ sort testfile -k 2
ZhangSan 70
LiSi 80
MaLiu 88
WangWu 90
在某些情况下,或许只想看看文件是否已经排序,使用-c
参数 :
$ sort -c testfile
sort: testfile:2: disorder
如果没有排序会有输出,而排序的话就没有输出。
如果希望看一下数字从高到低的培训,使用-r
参数:
$ sort testfile -k 2 -r
WangWu 90
MaLiu 88
LiSi 80
ZhangSan 70
Linux uniq
命令用于检查及删除文本文件中重复出现的行列,一般与 sort
命令结合使用。
官方定义为:
uniq
- report or omit repeated lines
uniq 可检查文本文件中重复出现的行列。
语法比较简单,直接用就可以。
$ uniq [OPTION]... [INPUT [OUTPUT]]
常用的参数为:
-c
或--count
在每列旁边显示该行重复出现的次数。
-d
或--repeated
仅显示重复出现的行列。
-u
或--unique
仅显示出一次的行列。
假定有1个文件为testfile,内容如下:
testfile
Hello 1
Hello 2
Hello 2
Hello 3
Hello 3
Hello 3
Hello 4
Hello 4
Hello 4
Hello 4
使用uniq 命令可以删除重复的行,不管有多少重复的行,仅仅显示一行。
$ uniq testfile
Hello 1
Hello 2
Hello 3
Hello 4
如果希望统计每一行出现的频次,可以使用-c
参数,其中第一行输出为出现的次数
$ uniq -c testfile
1 Hello 1
2 Hello 2
3 Hello 3
4 Hello 4
在某些情况下,或许只想看到有重复的列,使用-d
参数 :
$ uniq -d testfile
Hello 2
Hello 3
Hello 4
而某些情况下,或许只想看到不重复的列,使用-u
参数:
$ uniq -u testfile
Hello 1