[Linux Shell学习系列三]常用Shell(Bash)命令-文本处理
D9
1. sort命令
sort命令用于将文本文件的行排序。默认按照字符串的字母顺序排序。
$ cat test.txt #源文件 abc def ghi def $ sort test.txt #默认按照字母顺序排序 abc def def ghi $ sort -u test.txt #使用-u选项,可以删除重复的行 abc def ghi $ cat test.txt #内容为数字的源文件 20 10 35 100 69 $ sort test.txt #默认按照字母顺序排序,100排在20前面 10 100 20 35 69 $ sort -n test.txt #使用-n选项,可以将数字按照数值大小排序 10 20 35 69 100 $ sort -n -r test.txt #使用-r选项,可以按照倒序排序 100 69 35 20 10 $ sort file1 file2 #可以同时对多个文件的内容排序 $ cat test.txt #具有多列的源文件,以,分列 20,a 10,b 35,e 100,d 69,c $ sort test.txt #默认以第一列的字符串字母顺序排序 10,b 100,d 20,a 35,e 69,c $ sort -t ',' -k 2 test.txt #使用-t选项指定列的分隔符,使用-k选项指定进行排序的列,这里是第2列 20,a 10,b 69,c 100,d 35,e $ cat test.txt #第二列为数字的源文件 a,10 c,20 d,35 e,100 $ sort -t ',' -k2n test.txt #用第二列排序,使用-n选项指定为数值顺序 a,10 c,20 d,35 e,100 $ sort -t ',' -k2nr test.txt #用第2列排序,使用-r选项指定为倒序排序 e,100 d,35 c,20 a,10
2. uniq命令
uniq命令用于移除或发现文件中重复的条目。
$ cat test.txt #文件中存在重复的行 aaa aaa bbb ccc bbb $ uniq test.txt #移除文件中重复的行(必须是相邻的) aaa bbb ccc bbb $ uniq -c test.txt #使用-c选项,可以统计重复行出现的次数 2 aaa 1 bbb 1 ccc 1 bbb $ uniq -d test.txt #使用-d选项,显示文件中重复的行并只显示一次 aaa $ uniq -D test.txt #使用-D选项,显示文件中所有重复的行 aaa aaa $ uniq -u test.txt #使用-u选项,只显示文件中不重复的行 bbb ccc bbb $ cat test.txt #具有两列的源文件 aaa bbb aaa ccc bbb aaa ccc aaa bbb aaa $ uniq -w 3 test.txt #使用-w参数,指定比较前N个字符是否重复 aaa bbb bbb aaa ccc aaa bbb aaa $ uniq -s 3 test.txt #使用-s参数,指定比较时跳过前N个字符,只比较后面的字符是否重复 aaa bbb aaa ccc bbb aaa $ uniq -f 1 test.txt #使用-f参数,指定比较时跳过前N列,只比较后面的字符是否重复 aaa bbb aaa ccc bbb aaa
3. tr命令
tr命令用于转换字符、删除字符和压缩重复的字符。它从标准输入读取数据并将结果输出到标准输出。
语法:tr [OPTION]... SET1 [SET2]
$ echo linuxShell | tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ #将标准输入中所有SET1中的字符,替换为SET2中相同位置的字符 LINUXSHELL $ echo linuxShell | tr [:lower:] [:upper:] #与上面的相同 LINUXSHELL $ echo linuxShell | tr a-z A-Z #与上面的相同 LINUXSHELL $ cat input #用于输入的文件内容 {linuxShell} $ tr '{}' '()' < input > output #从文件输入并输出到文件,将大括号转为小括号 $ cat output #输出的文件内容 (linuxShell) $ echo "This is for testing." | tr ' ' '\t' #将空格转为制表符 This is for testing. $ echo "This is for testing." | tr ' ' '\t' #如果有重复的空格,则逐个替换 This is for testing. $ echo "This is for testing." | tr -s ' ' '\t' #使用-s选项,将重复的空格进行压缩 This is for testing. $ echo "This is for testing." | tr -d a-f #使用-d选项,删除指定的字符,这里删除a到f的小写字母 This is or tsting. $ echo "This is NO.23456." | tr -d [:digit:] #使用-d选项,删除数字 This is NO.. $ echo "This is NO.23456." | tr -c -d [:digit:] #使用-c配合-d选项,删除数字以外的所有字符 23456
4. grep命令
grep命令用于搜索文本或指定的文件中与指定的字符串或模式相匹配的行。默认只显示匹配的行。
语法:grep [OPTION]... PATTERN [FILE]...
grep [OPTION]... [-e PATTERN | -f FILE] [FILE]...
$ cat test.txt #源文件 AAA BBB aaa bbb ccc ab bbb ccc $ grep a test.txt #查找文件中a aaa bbb ccc ab $ grep -i a test.txt #使用-i选项,忽略搜索关键字的大小写 AAA BBB aaa bbb ccc ab $ grep -r a backup #使用-r选项,递归搜索指定目录下所有文件 backup/a/test/d/d.txt:aaa $ grep -rl a backup #使用-l选项配合-r选项,递归搜索指定目录下所有文件,只输出包含匹配指定模式的行的文件名 backup/a/test/d/d.txt $ cat test.txt #源文件 a b AAA BBB aaa bbb ccc ab bbb ccc $ grep a test.txt #默认匹配扩展的字符串,如aaa,ab a b aaa bbb ccc ab $ grep -w a test.txt #使用-w选项,只匹配包含指定单词a的行,而不扩展 a b $ grep -c a test.txt #使用-c选项,报告文件或文本中模式被匹配的次数 3 $ grep -n a test.txt #使用-n选项,显示每一个匹配的行的行号 1:a b 3:aaa bbb 4:ccc ab $ grep -v a test.txt #使用-v选项,输出除匹配的行之外的其他所有行(即不包含a的行) AAA BBB bbb ccc $ grep --color a test.txt #使用--color选项,在输出中将匹配的字符串以彩色的形式标出 a b aaa bbb ccc ab $ cat test.txt |grep -i a #与管道一起使用 a b AAA BBB aaa bbb ccc ab
5. diff命令
diff命令用于比较两个文件,并找出它们的不同。
语法:diff [OPTION]... from-file to-file
$ cat t1.txt #源文件1 l1:aaa l2:bbb l3:ccc l4:ddd l5:eee l6:fff l7:ggg l8:hhh l9:iii $ cat t2.txt #源文件2 l1:aaa 1 l2:bbb l3:ccc l6:fff l7: g g g l8:hhh $ diff t1.txt t2.txt #使用diff比较两个源文件 1c1 #表示第1行不一致 < l1:aaa #小于号表示第一个文件的行 --- > l1:aaa 1 #大于号表示第二个文件的行 6,8d5 #表示第一个文件比第二个文件在第5行后面多了6-8行 < l4:ddd #小于号表示第一个文件的行 < l5:eee < 10c7 #表示第一个文件的第10行和第二个文件的第7行比较不一致 < l7:ggg --- > l7: g g g #这里看出是多了空格 $ diff -w t1.txt t2.txt #使用-w选项,比较两个文件时忽略空格 1c1 < l1:aaa --- > l1:aaa 1 6,8d5 < l4:ddd < l5:eee < #可以看到显示没有第10行和第7行的不一致 $ diff -y t1.txt t2.txt #使用-y选项,并排的输出两个文件的比较结果 l1:aaa | l1:aaa 1 l2:bbb l2:bbb l3:ccc l3:ccc l4:ddd < l5:eee < < l6:fff l6:fff l7:ggg | l7: g g g l8:hhh l8:hhh l9:iii l9:iii $ diff -yw -W 40 t1.txt t2.txt #使用-W选项,指定并列输出格式的列宽,使每行的内容可以完整显示 l1:aaa | l1:aaa 1 l2:bbb l2:bbb l3:ccc l3:ccc l4:ddd < l5:eee < < l6:fff l6:fff l7:ggg l7: g g g l8:hhh l8:hhh l9:iii l9:iii $ diff -c t1.txt t2.txt #使用-c选项,以上下对比的格式输出两个文件的比较结果 *** t1.txt Thu May 14 11:53:22 2020 --- t2.txt Thu May 14 11:54:56 2020 *************** *** 1,12 **** ! l1:aaa #叹号表示两个文件有差异的行 l2:bbb l3:ccc - l4:ddd #减号表示第二个文件比第一个文件少的行,如果是加号+表示第二个文件比第一个文件多出的行 - l5:eee - l6:fff ! l7:ggg l8:hhh l9:iii --- 1,9 ---- ! l1:aaa 1 l2:bbb l3:ccc l6:fff ! l7: g g g l8:hhh l9:iii
本节结束
欢迎大家评论交流,发现博文中存在的问题一定要留言哦

浙公网安备 33010602011771号