有没有办法将SED s ///命令的反向引用发送到管道?要从文本中获取条目,请更改它,然后将其写回。我发现SED中的替换有效:
$ echo 'Test ....' | sed 's/Test/'$( echo "<\0>" )'/'
<Test> ....
但是第一个管道没有:
$ echo 'Test ....' | sed 's/Test/'$( echo "<\0>" | tr 's' 'x' )'/'
<Test> ....
是什么原因?另外,我无法理解为什么这个有用。我认为应该在sed之前处理$()替换(尤其是当我打破引号时)。
如何使用sed将一个s ///命令插入另一个命令?我用bash。
答案 0 :(得分:4)
tr
命令对文本“&lt; \ 0&gt;”进行操作,而不是对“&lt; Test&gt;”进行操作。在管道完成之前,后向引用不会在sed
中展开。你的第二个例子相当于
foo=$( echo "<\0>" | tr 's' 'x' )
echo 'Test ....' | sed 's/Test/'$foo'/'
这里更容易看到tr
无法在其输入中看到“测试”。
答案 1 :(得分:1)
你可以用GNU sed和e
标志来达到你想要的效果:
echo 'Test ....' | sed 's/Test.*/echo "<\0>" | tr s x/e'
输出:
<Text ....>