【发布时间】:2012-06-27 07:01:51
【问题描述】:
我在使用以替换模式执行命令的 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 命令(与我发布的previous question 相同的方式)。我遇到的新问题是因为我现在在 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
【问题讨论】:
-
Mac OSX 10.7.4 上的 GNU sed 4.2
-
e选项记录在 GNUsedmanual 中。
标签: sed