sed 之替换命令

sed 之替换命令

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

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

先解释一下提一条命令:

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

    sed 之替换命令_第1张图片

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

    这里写图片描述

    in.txt 文件里面的内容没有改变,如果需要改变原文件可以
    加 -i 参数,后面会介绍到这个参数。sed -i s/hello/world/ 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 out.txt
再看一下执行结果:

这里写图片描述

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

你可能感兴趣的:(sed-脚本,sed,s,替换文本,sed脚本,sed-命令)