我试图在特定模式后仅使用sed执行N行上的替换。sed:模式匹配后在N行上执行替换
看看sed手册页,似乎应该可以使用addr1,+ N语法。但我无法让它工作。
<data>
<variable>DebuggerItem.Count</variable>
<value type="int">2</value>
</data>
<data>
<variable>Version</variable>
<value type="int">1</value>
</data>
我正在执行的替换查找此标记中的数字,并将它们递增1.它如下所示。
sed -r 's/([ ]*<value type=)\"(int)\"(>)([0-9]*)(.*)/echo "\1\\"\2\\"\3$((\4+1))\5"/ge' filename
我现在要限制更换只是在N行包含“DebuggerItem.Count”一前一后。在我目前的情况下,N是1,但我有另一个例子,我想在匹配后的5行中执行此操作,因此N将为5.
它可能可以用更复杂的替换来执行,但理想情况下,我想了解更多有关使用sed地址的信息。
注意:我在搜索替换中的双引号引起了一些麻烦,因为我需要将它们转义为以下回显。所以搜索替换有点复杂。我很抱歉。
你的大问题是'xml'数据不知道行,所以这种方法是错误的。如果不是现在,我敢打赌你会在不久的将来与它斗争。您应该尝试使用'xml'解析器。 – Birei 2015-02-10 14:29:49
我很欣赏你在说什么@Birei sed可能不是手头工作的最佳工具,因为我正在流编辑一个xml文件。但我仍然认为使用addr1,+ N语法用法的问题是有效的。如果能够帮助提供答案,我很乐意将问题重新格式化以移除<, /, "and >的实例。 – 2015-02-10 14:42:07