sed 功能详解

介绍sed

sed是一种流编辑器,它一次处理一行内容,把当前处理的行存储在临时缓冲区中(buffer),称为"模式空间",接着sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕,执行下一个循环。会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。除非你使用重定向输出或-i.

sed 不会修改文件,因为它处理的数据都是,缓冲区里面的

sed常用的参数和功能

-n 只输出匹配到的内容
-e 可以写多个匹配的模式,每个模式之间用;分开
-r 支持扩展的正则表达式
-f 将sed的动作写入一个文件中
-i 直接修改原文件的内容

flag 有四种标记
1.数值 表示替换到第几处
2.g 替换所有的匹配
3.p 原先行的内容打印出来
4.d 删除指定的内容
5.c 匹配到的行,替换指定的内容
6.! 匹配内容取反
7.w 替换的内容保存在文件中

测试实验

测试文件的内容:

-n 测试输出匹配的内容:
sed -n '/abc/p' test.txt
-e 测试输出匹配的内容:
sed -n -e '/abc/p' -e '/ABC/p' test.txt
s替换匹配内容
sed 's/abc/BCD/' test.txt 若flag无g则替换第一行第一处匹配的abc替换为BCD
sed 's/abc/BCD/g' test.txt 一行所有的abc都替换为BCD
sed 's/abc/BCD/2' test.txt 一行中第二次出现abc时进行替换
sed '/6$/i\I am a line insert!' test.txt ==在6为结尾的行前插入内容

实例1:

修改/etc/selinux/config 中的SELINUX的值

sed -ri 's/^(SELINUX=).*/\1disabled/' /etc/selinux/config

输出结果:

实例2:

在修改/etc/my.conf 中某行增加内容

sed '/^\[mysqld\]/a\user=root\n passwd=123456' /etc/my.conf

实例3:

用@来代替分隔符

sed -r 's@(socket=).*@\1/tmp/mysql.sok@' /etc/my.conf

实例4:

SHELL脚本内嵌入二进制可执行程序,

sed "1,/^# END OF THE SCRIPT/d" "$0" > ${prog_name}

# 在SHELL脚本中可以嵌入二进制可执行程序
# 思路:将二进制可执行程序添加到SHELL末尾,运行时再将该二进制可执行程序导出,然后执行导出的二进制程序

# ---------------------------------- Example
# 先准备SHELL脚本
[root@localhost ~]# cat test.sh
#!/bin/sh

prog_name="./test.exe"

sed "1,/^# END OF THE SCRIPT/d" "$0" > ${prog_name}   # 导出二进制程序,这个步骤很重要 ...
chmod u+x ${prog_name}
${prog_name} && rm -f ${prog_name}

# WARNING: Do not modify the following !!!
exit 0
# END OF THE SCRIPT ----------> 这是shell 脚本当前的最后一行

# ------------------------------- 

# 将二进制可执行程序 /bin/date 嵌入到该脚本中
[root@localhost ~]# cat /bin/date >> test.sh 

# 执行脚本 test.sh, 验证是否输出与 date 命令一致

[root@localhost ~]# ./test.sh
2012年 10月 24日 星期三 16:41:20 CST
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水火汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值