Linux三剑客之sed/文件处理命令

文件处理命令
一、sort命令
sort命令用于将文件内容加以排序
-n 依照数值的大小排序 默认按照每行的一个字符排序
[root@judyju ~]# cat test.txt | sort -n
-r 以相反的顺序来排序
[root@judyju ~]# cat test.txt | sort -n -r
-以某列进行排序
[root@judyju ~]# cat test.txt | sort -k2
-k 指定分割符,默认是以空格为分隔符
二、uniq命令
uniq命令用于检查及删除文本文件中重复出现的行列,一般和sort命令结合使用。
-c 在每列旁边显示改行出现的次数
[root@judyju ~]# cat test.txt | uniq -c
1 iiiiii
1 qqqqqq
1 hellohey
-d 仅显示重复出现的行列
[root@judyju ~]# cat test.txt | uniq -d -c
2 guantou
-u 仅显示出一次的行列
[root@judyju ~]# cat test.txt | uniq -u
三、cut命令
cut命令通常用来显示行中的指定部分,删除文件中的指定字段
-d 指定字段的分隔符 默认为字段分隔符TAB
-f 显示指定字段的内容
[root@judyju ~]# cut -f1 -d':' /etc/passwd
-->我们可以发现passwd这个文件里面的内容是有规律的,这样我们就可以用cut命令把这个文件中的第一列拿出来,命令如图所示
四、tr命令
tr命令用来替换或者删除命令
-d 删除字符
-s 删除所有重复出现的字符序列,只保留第一个;即将重复出现的字符串压缩为一个字符串
案例
1、将文件中出现的ah替换成op
[root@judyju ~]# cat test.txt | tr 'ab' 'op'
⚠️:这里是一个一个地单一替换,也就是说凡是在文件中出现的a字母,都替换成o,而不是整个字符串替换
2、使用tr命令听一字母大小写
[root@judyju ~]# cat test.txt | tr [a-z] [A-Z]
3、删除文件中'guantou'字样
[root@judyju ~]# cat test.txt | tr -d 'guantou'
⚠️:这里是一个一个单个字符删除的,也就是说凡是在文件中出现的以上字符串的字母都会被删除
4、删除连续着的字母,只保留第一个
[root@judyju ~]# cat test.txt | tr -s [a-zA-Z]
五、wc命令
wc命令是用来统计和计算数字的
-c 统计文件的Bytes数
[root@judyju ~]# cat test.txt | wc -c
-l 统计文件的行数
[root@judyju ~]# cat test.txt | wc -l
-w 统计文件中单词的个数,默认以空白字符作分隔符,在linux系统一段连续的数字或字母组合为一个词
[root@judyju ~]# cat test.txt | wc -w
Linux三剑客之sed
一、概念
sed的全称是stream editor,流式编辑器,sed主要用来自动编辑一个或者多个文件,简化对文件的反复操作,简化对文件的反复操作,编写转换程序等。
二、格式
sed [options] 'command' [file]
sed [options] -f scripfile
三、参数
-e #允许多项编辑
-n #取消默认输出
-i #就地编辑<编辑完直接写入文件>
-r #支持拓展正则
-f #指定sed匹配脚本文件
四、定位
1、数字定位法,用数字指定行号
[root@judyju ~]# sed '5d' test.txt -->删除第5行
[root@judyju ~]# sed '1,3d' test.txt -->删除1到3行
2、正则定位法
[root@judyju ~]# sed '/^h/d' test.txt-->删除以h开头的行
3、数字正则定位法
[root@judyju ~]# sed '/^i/,6d' test.txt-->删除i开头的那一行到第6行
4、正则正则定位法
[root@judyju ~]# sed '/^i/,/u$/d' test.txt-->删除以i开头的那一行到以u结尾的那一行
五、sed的编辑模式
d #删除
[root@judyju ~]# sed '/^i/,6d' test.txt
p #打印
[root@judyju ~]# sed -n '1p' test.txt -->只显示第一行,因为-n参数是取消默认输出的
a #在当前行后添加一行或者多行
[root@judyju ~]# sed '2a100imjudy\n101imjudy' test.txt-->在第2行的后面加2行
c #用新文本修改(替换)当前行
[root@judyju ~]# sed '3c3bbbbb' test.txt
i #在当前行之前插入文本(单独使用时)
[root@judyju ~]# sed '2i100imjudy\n101imjudy' test.txt
r #在文件中读内容
[root@judyju ~]# sed '2r r.txt' test.txt-->将r.txt中的文件读取出来,放在test.txt文件中的第2行的后面
w #将指定行写入文件
[root@judyju ~]# sed '3w w.txt' test.txt-->读取test.txt第3行,将这第3行写入w.txt-->如果没有w.txt 会自动创建
y #将字符转换成另一个字符
[root@judyju ~]# sed 2y/xi/ia/ test.txt
⚠️y编辑模式是单个字符改变的,就是将第2行的x变成i,将第2行的i变成x
s #将字符串转换成另一个字符串
[root@judyju ~]# sed 's/hh/gg/' test.txt
g #全局执行
[root@judyju ~]# sed 's/hh/gg/g' test.txt
i #忽略大小写(跟s模式一起用)
[root@judyju ~]# sed 's/Hh/gg/gi' test.txt
& 代表前面匹配到的内容
案例
1、将nginx.conf中的注释行全部去掉
[root@judyju ~]# sed '/^ *#/d' /etc/nginx/nginx.conf
2、将nginx.conf的每一行都加注释
sed 's/.*/#&/g' /etc/nginx/nginx.conf
[root@judyju ~]# sed 's/^.*/#/g' /etc/nginx/nginx.conf
3、要求一键修改本机ip
[root@judyju ~]# sed 's/\.100/\.101/g' /etc/sysconfig/network-scripts//ifcfg-eth[01]
浙公网安备 33010602011771号