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

image

文件处理命令

一、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]
posted @ 2021-12-21 17:13  JudyJU  阅读(164)  评论(0)    收藏  举报