bash中除grep系之外的一些文本处理命令

其他的文本处理命令:
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

相关文章

用的openwrt路由器,家里宽带申请了动态公网ip,为了方便把2...
#!/bin/bashcommand1&command2&wait从Shell脚本并行...
1.先查出MAMP下面集成的PHP版本cd/Applications/MAMP/bin/ph...
1、先输入locale-a,查看一下现在已安装的语言2、若不存在如...
BashPerlTclsyntaxdiff1.进制数表示Languagebinaryoctalhexa...
正常安装了k8s后,使用kubect工具后接的命令不能直接tab补全...