Linux文本三剑客sed

发布时间 2023-08-16 17:43:10作者: 德国南部之星

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