问候,我如何在 BSD sed 中执行以下操作?
sed 's/ /\n/g'
从手册页中它指出 \n 将在替换字符串中按字面意思对待,我该如何避免这种行为?有替代品吗?
我正在使用 Mac OS Snow Leopard,我可能会安装 fink 来获取 GNU sed。
在外壳中,您可以执行以下操作:
sed 's/ /\
/g'
在反斜杠后按回车键以插入换行符。
为了方便使用,我个人经常使用
cr="\n"
# or (depending version and OS)
cr="
"
sed "s/ /\\${cr}/g"
所以它保持在 1 行。
要扩展@sikmir 的答案:在 Bash(Mac OS X 上的默认 shell)中,您需要做的就是$在包含要解释的转义序列的引号字符串前面放置一个字符。Bash 会自动为你翻译。
例如,我从所有源文件中删除了所有 MS-DOS 回车符,lib/并include/通过以下方式编写:
grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
find . -name '*-e' -delete
BSDgrep本身可以正确解释'\r',但使用$'\r'并没有什么坏处。
BSDsed本身会误解's/\r//',但是通过使用$'s/\r//',我避免了这个陷阱。
请注意,我们可以将$整个字符串放在前面,它会处理整个字符串中的所有转义序列。
$ echo $'hello\b\\world'
hell\world