【问题标题】:replace substrings between patterns with sed GnuWin32用 sed GnuWin32 替换模式之间的子字符串
【发布时间】:2023-02-04 03:33:22
【问题描述】:

我想尝试在模式子字符串之间找到然后替换它

源示例文本:

bbllaahh pattern1 blaah _SUBSTRING_ blah blaah
bbblah bbllaahh pattern1 blah blaah _SUBSTRING_ blahh  _SUBSTRING_ blaah blahh blah pattern2 blllah blaaah
blahh blllllah _SUBSTRING_ blaah pattern2 blluhhh

期待:

bbllaahh pattern1 blaah _SUBSTRING_ blah blaah
bbblah bbllaahh pattern1 blah blaah _REPLACE_ blahh  _REPLACE_ blaah blahh blah pattern2 blllah blaaah
blahh blllllah _SUBSTRING_ blaah pattern2 blluhhh

Patterns 可以是不同的,并且可以是一个或多个字符串。除子字符串替换外,源文本不会更改

我找到了 unix 的例子:

sed '/pattern1/,/pattern2/' - 不起作用

sed '/pattern1/{s/_SUBSTRING_/_REPLACE_/}' - 它可以工作,但我不确定是否为 pattern2 工作(' 被替换为 " for win)

我试图混合但它不起作用:

sed "/pattern1/,/pattern2/{s/_SUBSTRING_/_REPLACE_/}" - 模式 1 不起作用

sed "/pattern1/,{s/_SUBSTRING_/_REPLACE_}/pattern2/" - 不工作

另外 _SUBSTRING_ 可能是一些特殊角色之一(比如 "

P.S.:这是我在窗口环境中使用 sed GnuWin32 做的

【问题讨论】:

    标签: bash batch-file sed cmd


    【解决方案1】:

    假设您打算在同一行中同时找到 pattern1pattern2,这可能会起作用。

    $ sed '/pattern1.*pattern2/s/_[^_]*_/_REPLACE_/g' input_file
    bbllaahh pattern1 blaah _SUBSTRING_ blah blaah
    bbblah bbllaahh pattern1 blah blaah _REPLACE_ blahh  _REPLACE_ blaah blahh blah pattern2 blllah blaaah
    blahh blllllah _SUBSTRING_ blaah pattern2 blluhhh
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-21
      • 1970-01-01
      • 2012-12-21
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-22
      • 2016-04-29
      相关资源
      最近更新 更多