sed命令

xiaolv
27
2023-11-09

sed命令

特点及格式

  • sed stream editor:流编辑器,处理的内容当作水,直到文件末尾

  • 格式

sed -r 's#xiaolv#xks#g' 1.txt
命令 选项 sed命令功能(s)(g 修饰符) 文件名
  • 选项

 -e                 直接在命令行模式上进行sed动作编辑,此为默认选项;
 -f                 将sed的动作写在一个文件内,用–f filename 执行filename内的sed动作;
 -i                 直接修改文件内容;
 -n                 只打印模式匹配的行;
 -r                 支持扩展表达式;
 -h或--help          显示帮助;
 -V或--version       显示版本信息。

  • 功能 增删改查

s       替换 sub
p       显示print
d       删除delete 行为单位
cai     c/a/i 增加

sed的执行过程

  • 四个字描述: “找谁干啥”

  • 找谁:哪一行

  • 干啥:增删改查

sed核心应用

1. sed 查找p
'1p' '2p'               指定行号进行查找
'1,5p'                  指定行号范围进行查找 '3,$p'3到最后一行 'Sp'最后一行
'/xiaolv/p'             类似于grep过滤,//里面可以写正则
'/10:00/,/11:00/p'      表示范围的过滤,结尾内容匹配不到,会一直显示到最后一行
​
# 范例
# 指定行号
[13:51:55 root@XksRain ~]#sed -n '3p' passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
​
# 指定行号范围
[13:58:46 root@XksRain ~]#sed -n '1,5p' 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
​
# 过滤
[14:00:06 root@XksRain ~]#sed -n '/root/p' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
​
#范围过滤
  • 实际生产环境不要用cat/vim,用head/tail/less/more

2. sed 删除d 只是不显示,没有真的删除
'1d' '2d'               指定行号进行删除
'1,5d'                  指定行号范围进行删除 '3,$p'3到最后一行 'Sp'最后一行
'/xiaolv/d'             类似于grep过滤,//里面可以写正则 包含的行删除
'/10:00/,/11:00/d'      表示范围的过滤,结尾内容匹配不到,会一直显示到最后一行
​
# 指定行号删除
[14:09:23 root@XksRain ~]#sed '3d' passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/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
​
# 删除(不显示)文件中的空行和包含#的行
egrep -v '^$|#' /etc/ssh/sshd_config
sed -r '/^$|#/d' /etc/ssh/sshd_config
​
# !的妙用  !表示取反
[14:22:11 root@XksRain ~]#sed -rn '/^$|#/!p' /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
PermitRootLogin yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp  /usr/libexec/openssh/sftp-server

3. sed 增加 cai
c           replace 替代指定行
a           append 追加,向指定的行或每一行后增加内容 向下增加一行
i           insert 插入,像执行的行或每一行插入内容 向上增加一行
​
范例:
sed '3a zhuijianeirong' passwd
[15:04:10 root@XksRain ~]#sed '3a zhuijianeirong' 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
zhuijianeirong
adm:x:3:4:adm:/var/adm:/sbin/nologin

4. sed-替换s
  • s substitute 替换

替换格式
s###g 或者 s///g   带路径的后者不太方便  g表示全局替换
  • 后向引用,反向引用

  • 口诀:先保护,再使用

12345 改为 <123456>
echo 123456|sed -r 's#(.*)#<\1>#g'
​
# 练习:
# 1) echo xiaolv_book 通过sed后向引用,显示为book_xiaolv
[15:21:13 root@XksRain ~]#echo xiaolv_book|sed -r 's#(^.*)_(.*)#\2_\1#g'
book_xiaolv
​
# 2) ip a 通过反向引用取出eth0的网卡IP
[15:31:13 root@XksRain ~]#ip a s eth0|sed -n "5p"|sed -r 's#(^.*)t (.*)(/.*$)#\2#g'
172.16.0.167


动物装饰