13、sed

sed 命令

sed:Stream EDitor, 行编辑器
工作过程:

1、常用选项
-n:不输出模式中的内容至屏幕
-e:多点编辑
-f /PATH/TO/SCRIPT_FILE:从指定文件中读取编辑脚本;每行一个编辑命令
-r:支持使用扩展正则表达式
-i:原处编辑

2、地址定界
(1) 不给地址:对全文进行处理
(2) 单地址:
#: 指定的行
/pattern/:被此处模式所能够匹配到的每一行
(3) 地址范围:
#,#
#,+#
/pat1/,/pat2/
#,/pat1/
(4) ~:步进
1~2:所有奇数行
2~2:所有偶数行

3、编辑命令
d: 删除
p: 显示模式空间中的内容
a \text:在行后面追加文本;支持使用\n实现多行追加
i \text:在行前面插入文本;支持使用\n实现多行插入
c \text:替换行为单行或多行文本
w /path/to/somefile: 保存模式空间匹配到的行至指定文件中
r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后,文件合并
=: 为模式空间中的行打印行号
!: 取反条件,放在模式后的命令之前
s///:支持使用其它分隔符,s@@@,s###
替换标记:
g: 行内全局替换
p: 显示替换成功的行
w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中

1、删除1~5行的内容
[root@localhost ~]# sed "1,5d" /etc/fstab           
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=616aba39-6fd4-4727-9ab6-7c8787d65bf5 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap 
2、显示偶数行
[root@localhost ~]# sed '1~2d' /etc/fstab        
#
# Created by anaconda on Sat Jun 26 10:50:29 2021
# Accessible filesystems, by reference, are maintained under '/dev/disk'
#
UUID=616aba39-6fd4-4727-9ab6-7c8787d65bf5 /boot  
3、奇数行打印两遍
[root@localhost ~]# sed '1~2p' /etc/fstab 


#
# /etc/fstab
# /etc/fstab
# Created by anaconda on Sat Jun 26 10:50:29 2021
#
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=616aba39-6fd4-4727-9ab6-7c8787d65bf5 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
4、禁用默认的行为,只保留编辑后的行为
[root@localhost ~]# sed -n '1~2p' /etc/fstab 

# /etc/fstab
#
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
/dev/mapper/centos-root /                       xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
5、在第三行前面插入多个个新的内容,同理在第三行后面
[root@localhost ~]# sed '3i \insert test characters.\nanother new line.' /etc/fstab  | head -5

#
insert test characters.
another new line.
# /etc/fstab
5、将匹配到的行替换为指定的文本
[root@localhost ~]# sed '/^UUID/c \#this is a uuid' /etc/fstab  

#
# /etc/fstab
# Created by anaconda on Sat Jun 26 10:50:29 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
#this is a uuid
/dev/mapper/centos-swap swap                    swap    defaults        0 0
6、保存匹配到的内容到指定的文件中
[root@localhost tmp]# sed  -n '/^[^#]/w /tmp/fstab.txt' /etc/fstab 
7、将/etc/issue文件中的内容放在/etc/fstab中第二行的后面
[root@localhost tmp]# cat /etc/issue
\S
Kernel \r on an \m

[root@localhost tmp]# sed '2r /etc/issue' /etc/fstab 

#
\S
Kernel \r on an \m

# /etc/fstab
# Created by anaconda on Sat Jun 26 10:50:29 2021
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=616aba39-6fd4-4727-9ab6-7c8787d65bf5 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
8、只显示非#开头的行
[root@localhost tmp]# sed -n '/^#/!p' /etc/fstab 

/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=616aba39-6fd4-4727-9ab6-7c8787d65bf5 /boot                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
	

练习:

1、删除/boot/grub2/grub.conf文件中所有以空白开头的行行首的空白字符

[root@localhost etc]# sed 's@^[[:space:]]\+@@' /boot/grub2/grub.cfg

2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符

[root@localhost ~]# sed 's@^#[[:space:]]\+@@' /etc/fstab

3、echo一个绝对路径给sed命令,取出其基名;取出其目录名

[root@localhost ~]# echo "/var/log/messages" | sed -r 's@[^/]\+/?$@@' 
/var/log/messages
[root@localhost ~]# echo "/var/log/messages" | sed -r 's@[^/]+/?$@@' 
/var/log/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值