【问题标题】:Sed command: search for a string & replace 1 character after the stringsed 命令:搜索字符串并替换字符串后的 1 个字符
【发布时间】:2016-10-18 01:54:03
【问题描述】:

我正在尝试在 osx/bash 的 shell 脚本中使用 sed 命令。我可以使用最简单的命令形式替换MyFile 的一些内容,如下所示

sed -i -e 's/abc/123/g' MyFile

MyFile 的内容是xyzabcdefghijk。上面的命令可以很好地用123 替换abc & 使输出为xyz123defghijk

但是,如何修改sed 命令以替换abc 之后的2 字符以及abc。简而言之,我想在MyFile 中搜索字符串abc,并将其后面的abc + 2 字符替换为12345

所以,如果MyFile 包含abcdefghijk,那么输出应该包含xyz12345fghijk

有什么建议吗?

【问题讨论】:

    标签: bash shell sed


    【解决方案1】:

    更改abcabc 后面的两个字符:

    $ sed -e 's/abc../12345/g' MyFile
    xyz12345fghijk
    

    在正则表达式中,. 匹配任何单个字符。所以,.. 匹配两个字符,abc.. 匹配 abc 以及abc 之后的任意两个字符。

    要就地更改文件:

    sed -i.bak -e 's/abc../12345/g' MyFile
    

    【讨论】:

    • 如果我想用“123”替换像“abc”这样的两个字符,sed 选项是什么。你介意回答这个小问题..
    • 两个字符之间的部分我不清楚。你能澄清一下你的意思吗?也许,添加示例输入和输出。
    • 可以说样本输入是xyz"123"45fghijk。我需要输出为 xyz"96701"45fghijk...... 所以在xyz 之后,出现了 2 个双引号。我只想用96701 之类的东西替换abc 之后出现的两个双引号之间的字符串。
    • 我希望我把我的问题说清楚了 :) 我是新手并尝试做一些粗糙的事情 :)
    • 男人!!你是个天才。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2013-05-02
    • 2021-10-28
    • 2020-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-03-16
    • 2021-06-21
    • 2019-07-13
    相关资源
    最近更新 更多