sed 之替换命令

sed 之替换命令

  • 把之前整理的ppt文档上传到博客,本篇主要介绍sed 的s命令,替换文本。

sed s/target/expect/ <in.txt  >out.txt
echo "hello world"|sed s/world/jason/

先解释一下提一条命令:

  • s 代表替换
    / 是分隔符
    target 正则表达式模式,查找模式 (这个可以写正则表达式匹配)
    expect 是你要替换成的字符串
    <in.txt 表示从int.txt 文件获取输入, 或者 sed s/target/expect/ in.txt >out.txt
    >out.txt 表示输出结果到out.txt
  • sed s/target/expect/ <in.txt >out.txt
    下面就写个从文件读取,然后输出到文件的例子。
    创建两个文件 touch in.txt && touch out.txt
    向in.txt 添加一个单词 echo "hello" >in.txt
    先cat一下 in.txt 和 out.txt 里面的内容:

    这里写图片描述

    目标我们要把in.txt 当做标准输入,替换后的结果输出到out.txt 文件。
    sed s/hello/world/ <in.txt >out.txt
    执行完之后我们可以看一下结果:

    这里写图片描述

    in.txt 文件里面的内容没有改变,如果需要改变原文件可以
    加 -i 参数,后面会介绍到这个参数。sed -i s/hello/world/ <in.txt >out.txt
    out.txt 文件里面多了 world 这个单词。
    那如果一行里面有两个 hello 会有怎样的结果呢?
    echo "hello hello" >in.txt 覆盖输出到in.txt echo >out.txt 清空 out.txt 里面的结果
    我们再次看一下out.txt文件中的内容:

    这里写图片描述

Q & A

Q: 为什么第二个hello 没有被替换成 world?
A: sed,默认是以行为单位。你想改变一个单词,它只会
改变每行第一次出现的这个单词,你可能想改变行中的每
个单词。那么就需要加上一个g(global) 参数,全局替换.
sed s/hello/world/g <in.txt >out.txt
再看一下执行结果:

这里写图片描述

  • 那么更多的问题来了:
    1,如果需要替换第二个 hello 该怎么写
    2,如果文件有多行,但是需要替换指定的行,或者一个范围怎么写
    如果需要替换每一行第二个 hello 我们先看一下命令:
    sed s/hello/world/2 <in.txt >out.txt 这样就可以了
    sed s/hello/world/3g <in.txt >out.txt 修改每行第三个及以后的
    sed 3s/hello/world/g <in.txt >out.txt 替换第三行所有匹配
    sed 1,3s/hello/world/g <in.txt >out.txt 替换第一到第三行所有匹配
    sed 3,$s/hello/world/g <in.txt >out.txt 替换第三行和第三行以后的所有行
    最后再补充几个比较有用的正则的例子:
    sed s/^/#/g file ^表示一行的开头,把file 文件的每行插入 # 号
    sed s/$/@/g file $表示一行结尾,把file 文件每行结尾插入 @ 号
    sed s/\<abc/test/g file \< 表示以abc 开头的单词, 把以abc 开头的单词替换成 test
    sed s/\>bcd/test/g file \> 表示词尾,命令表示,把以bcd 结尾的单词替换成 test
    sed s/<[^>]*//g file.html 正则表达式匹配,并删除标签对
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值