1. sed 脚本语言
- sed即Stream EDitor,sed自己的脚本语言,与vi不同,sed是编辑器
[root@localhost ~]#sed --help
用法: sed [选项]... {sed自己的脚本} [输入文件]...
[root@localhost ~]#xargs #ctrl+D传参并退出
lll
lll
[root@localhost ~]#xargs echo #ctrl+D传参并退出
lll
lll
[root@localhost ~]#seq 10
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | xargs
1 2 3 4 5 6 7 8 9 10
[root@localhost ~]#seq 10 | xargs -n1 #-n1一次传一个
1
2
3
4
5
6
7
8
9
10
脚本 '地址' + '命令' 组成
脚本 '命令' #没有地址就是全文
常用选项
-n:关闭自动打印
-r:使用扩展正则表达式
脚本命令
p:打印
q:退出
d:删除
a:在前面插入内容
i:在后面插入内容
c:替换内容
w file:保存匹配行到指定文件
r file:读取指定文件的文本至模式空间中匹配的行后
=:匹配行取反
!:打印行号
[root@localhost ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:76:f0:1a txqueuelen 1000 (Ethernet)
RX packets 176821 bytes 251371933 (239.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20938 bytes 1305045 (1.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@localhost ~]#ifconfig ens33 | sed -n '2p' #打印第二行
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
[root@localhost ~]#ifconfig ens33 | sed '1q' #打印第一行
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
[root@localhost ~]#ifconfig ens33 | sed '3q' #打印第一行到第三行
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
[root@localhost ~]#ifconfig ens33 | sed -n '3p' #打印第三行
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
[root@localhost ~]#ifconfig ens33 | sed -n '1,3p' #打印第一行到第三行
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
[root@localhost ~]#ifconfig ens33
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.8.100 netmask 255.255.255.0 broadcast 192.168.8.255
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:76:f0:1a txqueuelen 1000 (Ethernet)
RX packets 177196 bytes 251398928 (239.7 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 21093 bytes 1321207 (1.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
#打印3-5行
[root@localhost ~]#ifconfig ens33 | sed -n '3,+2p'
inet6 fe80::dc8b:de58:8fff:ce65 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:76:f0:1a txqueuelen 1000 (Ethernet)
RX packets 177151 bytes 251395544 (239.7 MiB)
[root@localhost ~]#seq 10 | sed -n 'n;p' #打印偶数行 n将下一行留在高级空间
2
4
6
8
10
[root@localhost ~]#seq 10 | sed -n '2,${n;p}' #从2开始打印奇数行
3
5
7
9
[root@localhost ~]#seq 10 | sed '2d' #删除第二行
1
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '0~2d' #0开始步长为2的删除
1
3
5
7
9
[root@localhost ~]#seq 10 | sed '1~2d' #1开始步长为2的删除
2
4
6
8
10
[root@localhost ~]#seq 10 | sed '3a#' #a表示在3后面插入内容
1
2
3
#
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3a@'
1
2
3
@
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3i*' #i表示在3前面插入内容
1
2
*
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3chello' #c表示替换3的内容
1
2
hello
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3a aa\nbb\ncc' #在3后面插入aa bb cc \n换行
1
2
3
aa
bb
cc
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3i aa\nbb\ncc' #在3前面插入aa bb cc \n换行
1
2
aa
bb
cc
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed '3c aa\nbb\ncc' #将3内容替换成aa bb cc \n换行
1
2
aa
bb
cc
4
5
6
7
8
9
10
[root@localhost ~]#vim test.txt
[root@localhost ~]#cat test.txt
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#sed -i.bak '3ajkl' test.txt #在3后面插入内容
[root@localhost ~]#cat test.txt #查看
1
2
3
jkl
4
5
6
7
8
9
10
[root@localhost ~]#sed -i.bak '3ihjk' test.txt #在3前面插入内容
[root@localhost ~]#cat test.txt #查看
1
2
hjk
3
4
5
6
7
8
9
10
[root@localhost ~]#sed -i.bak '3chello' test.txt #将3替换成hello
[root@localhost ~]#cat test.txt
1
2
hello
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 >test.txt #1-10追加到test.txt文档中
[root@localhost ~]#cat test.txt
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#sed -i.bak '4d' test.txt #删除第4行
[root@localhost ~]#ls
anaconda-ks.cfg initial-setup-ks.cfg test.txt.bak 模板 图片 下载 桌面
expect test.txt 公共 视频 文档 音乐
[root@localhost ~]#cat test.txt #查看文档,第4行已经删除
1
2
3
5
6
7
8
9
10
[root@localhost ~]#cat test.txt.bak
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#seq 10 | sed 'p' #p带有自动打印功能,又打印一遍内容
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
[root@localhost ~]#sed -n '/^r/,/^d/p' /etc/passwd #/etc/passwd中以r开关,以d结尾的行
[root@localhost ~]#sed -i 's/r..t/&er/g' /etc/passwd
[root@localhost ~]#cat /etc/passwd
rooter:x:0:0:rooter:/rooter:/bin/bash
[root@localhost ~]#echo 123abcdef | grep -E '[0-9]+'
123abcdef
[root@localhost ~]#echo 123abcdef | awk -Fa '{print $1}'
123
[root@localhost ~]#echo 123abcdef | sed -rn 's/(123)(abc)(def)/\1/p'
123
[root@localhost ~]#echo 123abcdef | sed -rn 's/(123)(abc)(def)/\3\2\1/p'
defabc123
[root@localhost ~]#echo 123abcdef | sed -rn 's/(123)(abc)(def)/\2\3\1/p'
abcdef123
[root@localhost ~]#echo 123abcdef | sed -rn 's/(123)(abc)(def)/\2\1\3/p'
abc123def
[root@localhost ~]#echo "/etc/sysconfig/network-scripts/ifcfg-ens33" | sed -nr 's@(.*/)(.*)@\2@p'
ifcfg-ens33
[root@localhost ~]#echo "/etc/sysconfig/network-scripts/ifcfg-ens33" | sed -nr 's@(.*/)(.*)@\1@p'
/etc/sysconfig/network-scripts/
[root@localhost ~]#echo "/etc/sysconfig/network-scripts/ifcfg-ens33" | sed -nr 's@(.*/)(.*)@\0@p'
/etc/sysconfig/network-scripts/ifcfg-ens33