我在使用以替换模式执行命令的 sed 替换选项时遇到问题。我相信该选项是对GNU sed的扩展,但我无法找到任何关于它的文档。有人知道吗?
我的问题是使用执行替换选项时无法正确提取匹配的文本。我在 Mac OSX 10.7.4 上使用 GNU sed 4.2
echo "12345678\r" | sed 's/.*/echo "&);"/e'
Result: );345678
Desired Result: 12345678);
我尝试过使用不同的正则表达式匹配,例如 \d+,但这似乎破坏了使用 /e 替换选项的能力。而且我尝试使用显式捕获组,例如 \1 而不是 & ,但这似乎也破坏了 /e 选项。
更新:
我的示例可能过于简单了,我最终想要做的是获取一个文本文件,其中每一行都包含一个唯一值,然后将其传递给 sed 并使用 uuidgen 命令(与我发布的上一个问题相同)。我遇到的新问题是因为我现在在 Mac 上运行命令 \r 没有从匹配的字符串中删除。
我要执行的完整命令是:
sed 's/.*/echo "blah blah `uuidgen`,&):"/e' file.txt
更新 2:
在我的 Mac 终端中,我不需要使用 echo -e 将 \r 解释为换行,实际上根据“man echo”,没有 -e 选项。在所有终端环境之间移动确实使生活变得困难:(。
感谢kev,我能够想出一个适用于Mac的解决方案。
sed 's/\r//; s/.*/ echo "blah blah (`uuidgen`,&);"/e' file.txt