我一直在用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吗?
提前感谢您的意见。
答案 0 :(得分:2)
将您的替换更改为:
s||\nModel-Manufacturer:N/A&|
使用备用分隔符意味着您不必在“N / A”中转义斜杠。使用空的左侧重用最近的匹配。 &符将比赛复制到右侧。
此外,您需要删除-n
。
答案 1 :(得分:1)
如果我理解你想要实现的目标,那么你就非常接近了。我认为将替换命令更改为以下内容使其起作用:
s/\nTest_Version/\nMode-Manufacturer:N\/A\nTest_Version/