如何在BSD sed中使用换行?

时间:2009-09-14 13:13:45

标签: regex sed bsd

问候,如何在BSD sed中执行以下操作?

sed 's/ /\n/g'

从man-page中可以看出\ n将在替换字符串中字面处理,我该如何避免这种行为?有替代品吗?

我正在使用Mac OS Snow Leopard,我可能会安装fink来获取GNU sed。

4 个答案:

答案 0 :(得分:16)

在shell中,你可以这样做:

    sed 's/ /\
/g'

在反斜杠后点击回车键以插入换行符。

答案 1 :(得分:8)

另一种方式:

sed -e 's/ /\'$'\n/g'

请参阅here

答案 2 :(得分:5)

为了便于使用,我个人经常使用

cr="\n" 
# or (depending version and OS)
cr="
"

sed "s/ /\\${cr}/g"

所以它保持在1行。

答案 3 :(得分:0)

要扩展@ sikmir的答案:在Bash中,这是Mac OS X上的默认shell,您需要做的就是在包含您想要的转义序列的带引号的字符串前放置一个$字符得到解释。 Bash会自动为您翻译。

例如,我通过写下来删除了lib/include/中所有源文件的所有MS-DOS回车符:

grep -lr $'\r' lib include | xargs sed -i -e $'s/\r//'
find . -name '*-e' -delete

BSD grep会自行正确解释'\r',但使用$'\r'并不会造成伤害。

BSD sed会自行误解's/\r//',但通过使用$'s/\r//',我避免了这个陷阱。

请注意,我们可以将$放在整个字符串的前面,它将处理整个字符串中的所有转义序列。

$ echo $'hello\b\\world'
hell\world