问候,我如何在 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