一行上的多个sed重写无法正常工作

时间:2016-02-02 21:49:52

标签: sed

我正在编写TeX文件并使用function pos(index) { return wrapper.children[index].style; } for (var i = 0; i < 10; i++) { wrapper.appendChild(document.createElement('div')); var style = pos(i); style.left = Math.random() * w + 'px'; } 作为|...|的简写,并尝试使用

来完成此操作
\verb|...|

但是,如果我在同一行上有两个sed 's/|\(.*.\)|/\\verb|\1|/g' 实例,则只重写第一个实例。例如,

|...|

结果

printf " test |1| then |2| \n finally |3|" | sed 's/|\(.*.\)|/\\verb|\1|/g'

请注意, test \verb|1| then |2| finally \verb|3| 的第二次使用无法正确翻译。

感谢任何帮助!

2 个答案:

答案 0 :(得分:3)

printf " test |1| then |2| \n finally |3|" | sed 's/|\([^|]*[^|]\)|/\\verb|\1|/g'

您的RE无法按预期工作,因为sed会捕获最长的匹配。因此,对于示例的第一行,表达式.*.1| then |2捕获为单个匹配项。我将表达式更改为[^|]*[^|]以禁止捕获垂直条。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed 's/|[^|]*|/\\verb&/g' file