Linux文本三剑客sed
目录
- 脚本格式
sed 即Stream EDitor sed是编辑器
sed格式
sed [选项] ... {sed自己的脚本}{输入文件} ...
sed '脚本语言'
sed自己的脚本语言
脚本 '地址' + '命令'
脚本 '命令' #没有地址就是全文
选项:
-n 不输出模式空间内容到屏幕,即不自动打印
-r 使用扩展正则表达式
脚本命令:
p 打印
###查看文件内容
[root@localhost ~]#sed ' ' /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 218.2.135.1
脚本格式
###全文打印
[root@localhost ~]#ifconfig ens33 |sed -n 'p'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.174.100 netmask 255.255.255.0 broadcast 192.168.174.255
inet6 fe80::729d:4498:fde2:db26 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:b3:1f txqueuelen 1000 (Ethernet)
RX packets 4742 bytes 381995 (373.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 3367 bytes 340217 (332.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
###打印第二行
[root@localhost ~]#ifconfig ens33 |sed -n '2p'
inet 192.168.174.100 netmask 255.255.255.0 broadcast 192.168.174.255
###打印第一行到第三行
[root@localhost ~]#ifconfig ens33 |sed -n '1,3p'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.174.100 netmask 255.255.255.0 broadcast 192.168.174.255
inet6 fe80::729d:4498:fde2:db26 prefixlen 64 scopeid 0x20<link>
###打印到第三行退出
[root@localhost ~]#ifconfig ens33 |sed '3q'
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.174.100 netmask 255.255.255.0 broadcast 192.168.174.255
inet6 fe80::729d:4498:fde2:db26 prefixlen 64 scopeid 0x20<link>
###pattern表示匹配
[root@localhost ~]#sed -n '/^root/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
###从第三行开始再加2行
[root@localhost ~]#ifconfig ens33 |sed -n '3,+2p'
inet6 fe80::729d:4498:fde2:db26 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:5d:b3:1f txqueuelen 1000 (Ethernet)
RX packets 1616 bytes 133707 (130.5 KiB)
[root@localhost ~]#sed -n '/^r/,/^s/p' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin
saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin
rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin
pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin
qemu:x:107:107:qemu user:/:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
radvd:x:75:75:radvd user:/:/sbin/nologin
chrony:x:994:990::/var/lib/chrony:/sbin/nologin
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
usbmuxd:x:113:113:usbmuxd user:/:/sbin/nologin
geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin
sssd:x:992:987:User for sssd:/:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin
avahi:x:70:70:Avahi mDNS/DNS-SD Stack:/var/run/avahi-daemon:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
#从第三行到g开头
[root@localhost ~]#sed -n '3,/^g/p' /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
#~步长
#打印奇数
[root@localhost ~]#seq 10|sed -n '1~2p'
1
3
5
7
9
#打印偶数
[root@localhost ~]#seq 10|sed -n '2~2p'
2
4
6
8
10
#打印偶数
[root@localhost ~]#seq 10|sed -n '0~2p'
2
4
6
8
10
#高级写法打印偶数行
n将下一行留在高级空间
[root@localhost ~]#seq 10 |sed -n 'n;p'
2
4
6
8
10
#高级写法打印奇数行
[root@localhost ~]#seq 10 |sed -n '2,${n;p}'
3
5
7
9
#把第2行删掉
[root@localhost ~]#seq 10|sed '2d'
1
3
4
5
6
7
8
9
10
#把2-4行删掉
[root@localhost ~]#seq 10|sed '2,4d'
1
5
6
7
8
9
10
#用d删除的命令打印出奇数 0开始步长为2的删掉
[root@localhost ~]#seq 10|sed '0~2d'
1
3
5
7
9
#1开始步长为2的删掉
[root@localhost ~]#seq 10|sed '1~2d'
2
4
6
8
10
#a在后面加入
#在3后面加*
[root@localhost ~]#seq 10|sed '3a*'
1
2
3
*
4
5
6
7
8
9
10
#a多行添加\n换行
[root@localhost ~]#seq 10|sed '3a aa \nbb \ncc'
1
2
3
aa
bb
cc
4
5
6
7
8
9
10
#i在前面加入
#在3前面加^
[root@localhost ~]#seq 10|sed '3i^'
1
2
^
3
4
5
6
7
8
9
10
#c在中间替换
#把3替换?
[root@localhost ~]#seq 10|sed '3c?'
1
2
?
4
5
6
7
8
9
10
###-i 添加
[root@localhost ~]#seq 10 > test.txt
[root@localhost ~]#cat test.txt
1
2
3
4
5
6
7
8
9
10
[root@localhost ~]#sed -i '3ahihi' test.txt
[root@localhost ~]#cat test.txt
1
2
3
hihi
4
5
6
7
8
9
10
[root@localhost ~]#
[root@localhost ~]#sed -i '3clolo' test.txt
[root@localhost ~]#cat test.txt
1
2
lolo
hihi
4
5
6
7
8
9
10
[root@localhost ~]#sed -i '5d' test.txt
[root@localhost ~]#cat test.txt
1
2
lolo
hihi
5
6
7
8
9
10
[root@localhost ~]#sed -i.bak '5d' test.txt
[root@localhost ~]#ls
anaconda-ks.cfg test.txt 公共 视频 文档 音乐
initial-setup-ks.cfg test.txt.bak 模板 图片 下载 桌面
[root@localhost ~]#cat test.txt
1
2
lolo
hihi
6
7
8
9
10
[root@localhost ~]#cat test.txt.bak
1
2
lolo
hihi
5
6
7
8
9
10
xargs#读取标准输出并传给后面的命令
xargs 接收 标准输出 传给后面的命令 做参数
对于不接受管道符的命令可以用xargs作为中间转换
xargs echo
#Ctrl+D结束输出提交
[root@localhost ~]#xargs
abcd
abcd
[root@localhost ~]#
#Ctrl+D结束输出提交
[root@localhost ~]#xargs ls
/
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
[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 -n 1
1
2
3
4
5
6
7
8
9
10