已整理-sed文本处理命令

目录:
  1、sed使用方法
  2、查-查看指令-p
  3、增-添加内容
  4、删-删除指令-d
  5、改-替换指令
  6、写入文件

 

1、sed使用方法与功能
sed 流式编辑器,可以非交互式修改文本,逐行操作:增删改查

sed 是一种新型的,非交互式的编辑器;它能执行与编辑器vi和ex相同的编辑任务;

sed编辑器没有提供交互式使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出;
sed编辑器没有破坏性,它不会修改文件,除非使用shell重定向来保存输出结果;默认情况下,所有的输出行都被打印到屏幕上;
sed编辑器逐行处理文件(或输入) ,并将输出结果发送到屏幕;sed的命令就是在 vi和ed/ex编辑器中见到的那些;
sed把当前正在处理的行保存在一个临时缓存区中,这个缓存区称为模式空间或临时缓冲;
sed处理完模式空间中的行后(即在该行上执行sed命令后),就把改行发送到屏幕上(除非之前有命令删除这一行或取消打印操作);
sed每处理完输入文件的最后一行后,sed 便结束运行;sed把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改或破坏源文件;

 

 

前置命令|sed 选项 (定址符) 指令

sed |选项 (定址符)指令 文本        #用得比较多,用来修改文本文件

 

常用选项:

-n       屏蔽默认输出,只打打匹配过的内容
-r       支持扩展正则
-i        写入文件

 

2、查-查看指令-p
p 输出指定内容: # sed 'p' txt, 每行会输出2次,结合-n 就只输出一行:

# sed -n 'p' txt
# df -h|sed -n '1p'          #输出第1行
# df -h|sed -n '1,2p'         #输出第1行-第2行
# df -h|sed -n '1,+2p'        #输出第1行,再多输出2行,也就是1-3行
# df -h|sed -n '1p;4p'        #输出第1行和第4行
# df -h|sed -n '1~2p'          #输出第1行和后面的奇数行,如:35、7行等,隔行输出
# df -h|sed -n '1~1p'        #输出第1行和后面的偶数行,如:24、6行等
# sed -n '$=' /etc/passwd        #显示最后1行行号
# sed -n '=' /etc/passwd        #显示每行的行号

 

3、增-添加内容
a      #行后追加
i      #行前添加
c      #直接替换行

# sed '1,2a 8888' passwd          #在第1行和第2行后面添加8888
# sed '1,2i 8888' passwd          #在第1行和第2行前面添加8888
# sed '/AAAA/i 8888' passwd        #在有AAAA字符串的行前面添加8888
# sed '/AAAA/c 8888' passwd        #把有AAAA字符串的行,整行替换成8888

 

4、删-删除指令-d
d

# df -h |sed '1d'          #删除第1行, 不要加-n,其它操作参考查看指令
# df -h |sed '2d'          #删除第2行
# df -h |sed '2,5d'         #删除第2行到第5行

 

扩展正则:

# sed -r '/bash|nologin/d' passwd    #sed 默认不支持扩展正则,后面得加-r 选项才可以;

 

5、改-替换指令
s

# sed 's/root/haha/' passwd            #替换,root字符串替换成haha,只匹配1次,每行只替换1次
# sed 's/root/haha/g' passwd           #替换,root字符串替换成haha,替换每行所有匹配的字符串
# sed 's/root/haha/2' passwd            #替换,root字符串替换成haha,但只替换第2次匹配的字符串
# sed '3s/2017/2022/1' passwd          #替换第3行,把2017字符串替换成2022,且只替换1次

# sed 's#/bin/bash#/bin/tash#' /etc/passwd     #sed支持#代替/书写方式,防止混淆

# sed -n '2s/2017/3333/p' passwd          #替换第2行的2017替换成3333,并打印出来更换出来的内容

# sed -n '2s/^/#/p' passwd             #在第2行的前面添加注释#
# sed -n '2s/^#an/an/p' passwd           #在第2行的前面去掉注释#

# sed 's/./g/2;s/.$//' passwd             #第2个字符替换成g,同时删除最后1个字符

# sed 's/[0-9]//g' passwd                #替换所有数字为空

# sed -r 's/(a)(b)/\2\1/' passwd             #界定范围,调换字符a和b的位置

# sed -r 's/^(.)(.*)(.)$/\3\2\1/' passwd          #界定范围,调换每行的第1个字符和最后1个字符的位置
# sed -r 's/([A-Z])/[\1]/g' passwd            #界定范围,每个字符后面加[]

 


6、写入文件
-i

# sed -r -i '/bash|nologin/d' passwd            #删除含bash或nologin的行
# sed -r -i '/bash|nologin/!d' passwd           #删除不含bash或nologin的行
# sed -i '$d' passwd                      #删除最后1行

 

posted on 2022-10-20 14:25  tengq  阅读(117)  评论(0编辑  收藏  举报

导航