
Sed 手册
行数定位符
- sed -n '3p' passwd #打印第3行
[root@myx01 ~]# nl passwd | sed -n '3p'
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
- sed -n '1,3p' passwd #打印第1行到第3行
[root@myx01 ~]# nl passwd | sed -n '1,3p'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
- sed -n '1,+3p' passwd #打印第1行和后面3行
[root@myx01 ~]# nl passwd | sed -n '1,+3p'
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
- sed -n '1~2p' passwd #打印奇数行
[root@myx01 ~]# nl passwd | sed -n '1~2p'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- sed -n '2~2p' passwd #打印偶数行
[root@myx01 ~]# nl passwd | sed -n '2~2p'
2 bin:x:1:1:bin:/bin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
8 halt:x:7:0:halt:/sbin:/sbin/halt
- sed -n '2!p' passwd #不打印第二行
[root@myx01 ~]# nl passwd | sed -n '2!p'
1 root:x:0:0:root:/root:/bin/bash
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
正则定位
[root@myx01 ~]# grep ^root passwd #匹配以root开头的行
[root@myx01 ~]# sed -n '/^root/p' passwd #匹配以root开头的行
[root@myx01 ~]# grep -E '[0-9]{3}' passwd #匹配3个数字的行
[root@myx01 ~]# sed -rn '/[0-9]{3}/p' passwd #匹配3个数字的行
过滤文件内容
[root@myx01 ~]# sed -n '/IPADDR/p' /etc/sysconfig/network-scripts/ifcfg-ens33 #匹配IPADDR行
[root@myx01 ~]# free -m |sed -n '/Mem/p' #匹配Mem行
[root@myx01 ~]# df -h |sed -n '/\/$/p' #匹配以/结尾的行
[root@myx01 ~]# sed -n '1p;10p;11p' passwd #打印1,10.11行
删除 -Delete -D
[root@myx01 ~]# sed 'd' passwd #删除整文
[root@myx01 ~]# sed '1,3d' passwd #删除第1到第3行
[root@myx01 ~]# sed '1,3!d' passwd #排除第1到第3行 不删除
[root@myx01 ~]# sed '/^root/d' passwd #删除以root开头的行
[root@myx01 ~]# sed '/^$/d' passwd #删除空行
修改文件
[root@myx01 ~]# -i :永久删除
[root@myx01 ~]# sed -i '1,3d' passwd #删除第1到第3行
[root@myx01 ~]# sed -i.bak '1,3d' passwd #删除第1到第3行 并备份
替换行 -c replace
[root@myx01 ~]# sed 'c 123456' passwd #替换所有行为123456
[root@myx01 ~]# sed '/IPADDR/c IPADDR=2.2.2.2' ip.txt #替换IP
[root@myx01 ~]# sed '/127/c 127.0.0.1 localhost' /etc/hosts #将127替换成127.0.0.1 localhost
[root@myx01 ~]# sed '/SELINUX=enforcing/c SELINUX=disabled' /etc/selinux/config #将[root@myx01 ~]# SELINUX=enforcing替换成SELINUX=disabled
[root@myx01 ~]# sed '4c 111111' passwd #将文件的第4行更换成111111
替换关键字 -s Substitution
[root@myx01 ~]# sed 's/bin/BIN/' passwd #将第一行bin替换成BIN
[root@myx01 ~]# sed 's/root/rooot/g' passwd #将root替换成rooot
[root@myx01 ~]# sed 's/bin/BIN/2' passwd #替换每一行的的第二个bin为BIN
[root@myx01 ~]# sed '2s/bin/BIN/g' #替换第2行的bin为BIN
[root@myx01 ~]# sed 's/root/(&)/g' passwd #将root替换成(root),&表示旧内容
[root@myx01 ~]# sed '2s/bin//g' passwd #替换第二行的bin为空
[root@myx01 ~]# sed -n '2s/bin/BIN/p' passwd #只显示第2行bin替换BIN
- 注意:这里的替换符可以是其他的符号
[root@myx01 ~]# sed 's#root#rooot#g' passwd #将root替换成rooot
[root@myx01 ~]# sed 's,root,rooot,g' passwd #将root替换成rooot
[root@myx01 ~]# sed 's%root%rooot%g' passwd #将root替换成rooot
正则-后向引用
[root@myx01 ~]# echo "hello ni hao"|sed -r 's/(.)(.*)(.)$/\3\2\1/'
打印行号 =
[root@myx01 ~]# sed -n '1=' passwd #打印第1行行号
[root@myx01 ~]# sed -n '5=' passwd #打印第5行行号
[root@myx01 ~]# sed -n '/root/=' passwd #打印包含root的行号
[root@myx01 ~]# sed -n '/^root/=' passwd #打印以root开头的行号
[root@myx01 ~]# sed -n '/bash$/=' passwd #打印以bash结尾的行号
[root@myx01 ~]# sed -n '$=' passwd #打印整个文件的总行号
- 多行文本处理
[root@myx01 ~]# i insert 插入
[root@myx01 ~]# sed '2i abc_cba' passwd #在第二行插入abc_cba
[root@myx01 ~]# sed '/root/i abc_cba' passwd #在找到的root行前插入abc_cba
[root@myx01 ~]# sed '/root/i abc\ncba' passwd #在找到的root行前插入abc和cba2行
a > append追加
[root@myx01 ~]# sed '2a abc_cba' passwd #在第二行后追加abc_cba
[root@myx01 ~]# sed '2a abc\ncba' passwd #在第二行后追加abc和cba2行
r > read 读取其他文件内容
[root@myx01 ~]# sed '2r /etc/hosts' passwd #读取/etc/hosts文件内容并追加到passwd文件的第2行后面
[root@myx01 ~]# sed 'r /etc/hosts' passwd #在passwd每一行后导入/etc/hosts文件的内容
[root@myx01 ~]# sed '/root/r /etc/hosts' passwd #在包含root的行后面插入/etc/hosts的内容
w > write 保存到其他文件
[root@myx01 ~]# sed 'w passwd_new' passwd #将passwd的内容另存为一个新的文件:passwd_new
[root@myx01 ~]# sed '/root/w passwd_new' passwd #将包含root行的内容另存为一个新的文件:passwd_new
[root@myx01 ~]# sed '1,2w passwd_new' passwd #将第1和2行的内容另存为一个新的文件:passwd_new
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 梦缘羲
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果