已整理-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行和后面的奇数行,如:3、5、7行等,隔行输出
# df -h|sed -n '1~1p' #输出第1行和后面的偶数行,如:2、4、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
# 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 选项才可以;
# 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 #界定范围,每个字符后面加[]
# sed -r -i '/bash|nologin/d' passwd #删除含bash或nologin的行
# sed -r -i '/bash|nologin/!d' passwd #删除不含bash或nologin的行
# sed -i '$d' passwd #删除最后1行