【问题标题】:Sed with multiple lines does not replace patternsed 多行不替换模式
【发布时间】:2011-03-12 04:14:25
【问题描述】:

我一直在使用 sed 进行按摩(在此处找到教程:Grymoire)我们从硬件供应商处获得的 ASCII 文件。文件有这样的结构

Model-Manufacturer:D12-500
Test_Version:2.6.3

但是我们收到的一些文件是随机“损坏”的,并且缺少“Model-Manufacturer:”条目

Model-Manufacturer:D12-500
Test_Version:2.6.3
Model-Manufacturer:H24-700
Test_Version:2.6.3
Test_Version:2.6.3
Model-Manufacturer:R15-300
Test_Version:2.6.3

我想用 Sed 解决这个问题,并在 "Test_Version:2.6.3" 的第二次出现之前放置 "Model-Manufacturer:N/A" 的缺失条目;这是我的代码

sed -n '
/Test_Version/ {
# found "Test_Version" - read in next line
        N
# look for "Test_Version" on the second line
# and print if there.
        /\n.*Test_Version/ {
# found it - now edit making one line
                s/Test_Version/Model-Manufacturer:N/A/
        }
}' infile > outfile

它不工作。我相信在替换之前我需要记住每个“Test_Version”和“Model_Manufacturer”的位置,对吗?我可以用 sed 做到这一点吗?

提前感谢您的意见。

【问题讨论】:

    标签: sed


    【解决方案1】:

    将您的替换更改为:

    s||\nModel-Manufacturer:N/A&|
    

    使用备用分隔符意味着您不必转义“N/A”中的斜线。使用空的左侧会重复使用最近的匹配项。 & 符号将匹配复制到右侧。

    另外,您需要删除-n

    【讨论】:

    • 我的替换已关闭。你的成功了。谢谢你。就个人而言,sed 真的很厉害。
    【解决方案2】:

    如果我了解您想要实现的目标,那么您已经非常接近了。我认为将替换命令更改为以下命令即可:

    s/\nTest_Version/\nMode-Manufacturer:N\/A\nTest_Version/
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 1970-01-01
      • 2013-08-22
      • 2018-01-16
      • 1970-01-01
      相关资源
      最近更新 更多