其他的文本处理命令:
1.wc:(这个命令最常用的一些用法之前已经介绍过了,一般应用于管道进行输出)
2.cut命令:
cut - 在文件的每一行中提取片断
注意:能够被cut命令修剪的文件或数据内容,一般是具有某种特定格式或结构文本文件或数据内容;
如:etc/passwd
格式:cut OPTION... [FILE]
常用选项:
-d,--delimiter=DELIM:指定在实施修剪操作时所使用的分隔符号,默认时TAB(空白选项)
-f,--fields=LIST:根据指定的字段分割符号来指定要保留的字段编号列表;
LIST称为字段列表,地址定界,其书写方法:
1.NUM:选择被指定的单个数字所表示的字段,该字段将被保留;
2.NUM1,NUM2,NUM3,...:离散的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;
3.NUM1-NUM3:连续的多个被指定的字段的数字的列表;所有数值所代表的字段均被保留;
NUM1-: 从NUM 1 开始直到行尾的所有字段;
-NUM2:从行首第一个字段开始直到NUM2字段结束的所有字段;
--output-delimiter=STRING:指定输出数据时的字段分隔符号;
cut -d ":" -f 1-4 --output-delimiter=" " /etc/passwd
举个例子(我们把/etc/passwd中的前5行用户名和别名备注取出来):
[root@localhost~]#cut-d":"-f1,3/etc/passwd|head-5 root:0 bin:1 daemon:2 adm:3 lp:4
4.sort
sort - 对文本文件的行排序
对于指定文件中的行,按照ASCII编码表中的字符顺序进行排序输出;
格式:
sort [OPTION]... [FILE]...
常用选项:
-n:以数字的数值大小作为排序依据进行排序;
-r:倒序显示排序结果;
-R:随即排序;只是此随即算法非常简陋,不太适用于复杂环境中的排序要求;
-u:重复出现的行,只出现一次,去除重复;连续且相同的行称为重复行;
-t:指定字段分隔符;
-k:指定根据那个关键字字段进行排序,一般和-t同时使用;
举个例子:(我们随便建个文件,里边随机列一些数据,然后我们用sort进行排序)
[root@localhost~]#cat/tmp/test.txt 3 4 78945 45 623412 3 46797 0 2342 35 67 89 [root@localhost~]#sort-n/tmp/test.txt 0 3 3 4 35 45 67 89 2342 46797 78945 623412 [root@localhost~]#sort-R/tmp/test.txt|head-3 3 3 2342 [root@localhost~]#sort-n/tmp/test.txt|sort-u 0 2342 3 35 4 45 46797 623412 67 78945 89
我们可以用UID来进行/etc/passwd排序,只显示前5行。
[root@localhost~]#sort-n-t":"-k3/etc/passwd|head-n5 root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin adm:x:3:4:adm:/var/adm:/sbin/nologin
5.uniq
uniq - 删除排序文件中的重复行
注意:uniq本身不具备排序的功能
格式:
uniq [OPTION]... [INPUT [OUTPUT]]
常用选项:
-c:对于重复的行,计算重复次数;
-d:只显示重复的行,且每个重复行组只显示一行;
-u:只显示不重复的行;
例子:(发现不连续的重复的行不认为是重复的)
[root@localhost~]#cat/tmp/test.txt 3 4 0 0 33 q 0 33 33 33 [root@localhost~]#uniq-c/tmp/test.txt 13 14 20 133 1q 10 333 [root@localhost~]#sort-n/tmp/test.txt|uniq-c 30 1q 13 14 433
6.diff
diff - 找出两个文件的不同点
格式:
diff [选项] 源文件 目标文件
制作patch文件:
#diff file1 file2 > patch_file
注意:patch_file中记录的是file2到的内容和file1文件相比有哪些不同;使用patch_file时,应向file1打补丁;
举个例子:(1,2不同,并根据2向1打补丁)d->删掉 a->添加
[root@localhost~]#cat/tmp/text2.txt 1 123 1234 567890 [root@localhost~]#cat/tmp/text1.txt 1 12 123 1234 [root@localhost~]#diff/tmp/text1.txt/tmp/text2.txt 2d1 <12 4a4 >567890 [root@localhost~]#diff/tmp/text1.txt/tmp/text2.txt>/tmp/text.patch [root@localhost~]#patch-i/tmp/text.patch/tmp/text1.txt
7.patch patch - apply changes to files 格式: patch [OPTIONS] [orginalfile [patchfile]] 常用选项: -i:用于指明patch文件的路径;例子: 12 314 56 89 191 492 9 80 76 11 87 66 1024 99 721 384从上述数字中找出最大值和最小值:(发现这些命令无法直接进行截取操作,但我们可以发现,空白字符可以用tr命令转化为换行符,然后接下来的操作就变得简单可行了,我写了代码的实行部分)最大值: cat num.txt | tr ' ' '\n' | sort -n | tail -1最小值: cat num.txt | tr ' ' '\n' | sort -n | head -1
原文链接:https://www.f2er.com/bash/389562.html