sed学习总结及实例

sed是简单小巧但功能非常强大的工具。在上一篇博客中自己注解了sed的info文档中那些比较复杂的脚本示例,最近工作中使用到sed,复习了一下,再做一篇总结放在这里:

  • sed有两块缓冲区:pattern space和hold space。pattern space中存放待处理的目标文本,hold space供程序员自己使用。
  • sed处理流程:
    1. 清空pattern space。(如果这是对该输入流的第一次读取,则也将hold space初始化为空)
    2. 从输入流中读取一行,去除末尾的换行符,将其放入pattern space。
    3. 执行sed脚本。sed脚本由一系列命令组成。因为sed是按行处理,所以sed命令的含义主要是“对于什么样的行,则进行什么样的处理”。例如,“把第3行删除”,或者“如果这一行包含this,则把其中的this替换成that”。其中“包含什么样的行”由address指定,“执行什么样的处理”由sed命令序列表达。
    4. 脚本执行完毕,如果输入流中还有内容,转至1,开始下一轮处理。
  • 所以,学习sed,就是学习如何“指定需要处理的行”(address),以及学习我们能使用sed“进行什么样的操作”(command)。
  • 注意的是,sed都是按行处理,即使指定的是一个address range,比如sed -e '3,7s/this/that/g',s命令会被执行5次(从第3行到第7行每行执行一次)而不是只执行一次就将第3到第7行的所有this换成that。可以使用sed的N命令或者其他命令读入多行文本到pattern space。
  • sed使用/M或者/m来切换到"multiple line mode"(即多行处理模式)。所谓“多行处理模式”,是指在这种模式下,元字符^不再表示字符串起始位置,而是表示换行符后面的空字符串,元字符$也不再表示字符串末尾位置,而是表示换行符前面的空字符串。自我感觉这种模式没有任何作用,只会把问题弄得混乱,因为完全可以使用\n来匹配换行符,将其作为普通字符用在正则表达式中。
  • sed中的调试非常简便,可以使用上一篇博客中的那个python脚本来调试sed,也可以使用sed中的l命令或者p命令来输出pattern space中的内容进行调试。在以下的“去除多余空行“的方法二中使用l命令进行调试。

练习几个例子,以便将来温习:准备以下文件:

hbwang@jcwkyl:/home/hbwang$cat test
abc
de f
1     2 345
en d




int main () {
    printf("hello\n");
    return 0;
}


last empty
  1. 去掉所有换行符:
    • 方法一:vim打开文件,执行:1,$s/\n//即可。这里使用sed的方法&
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值