在sed替换字符串中转义换行符

时间:2012-01-24 17:26:36

标签: bash unix sed escaping solaris

我尝试在运行b

时使用sed替换换行符bash
$> echo 'abc' | sed 's/b/\n/'
anc

不,那不是它

$> echo 'abc' | sed 's/b/\\n/'
a\nc
不,那也不是。我想要的输出是

a
c

HELP!

5 个答案:

答案 0 :(得分:14)

看起来你在BSD或Solaris上。试试这个:

[jaypal:~/Temp] echo 'abc' | sed 's/b/\ 
> /'
a
c

添加黑色斜杠并按Enter键并完成sed声明。

答案 1 :(得分:3)

您没有说您想要全局替换所有 b 。如果是,您需要tr代替:

$ echo abcbd | tr b $'\n'
a
c
d

适用于Solaris 5.8和bash 2.03

答案 2 :(得分:3)

$ echo 'abc' | sed 's/b/\'$'\n''/'
a
c

在Bash中,$'\n'扩展为单引号的换行符(请参阅" QUOTING" man bash部分)。这三个字符串在作为参数传递给sed之前连接在一起。 Sed要求转换换行符,因此我粘贴的代码中会出现第一个反斜杠。

答案 3 :(得分:0)

echo 'abc' | sed 's/b/\'\n'/' 

''

附近缺少\n

答案 4 :(得分:0)

在多行文件中,我不得不穿过sed两侧的tr,如下所示:

echo "$FILE_CONTENTS" | \ tr '\n' ¥ | tr ' ' ∑ | mySedFunction $1 | tr ¥ '\n' | tr ∑ ' '

请参阅unix喜欢删除换行符和额外的前导空格以及各种各样的东西,因为我猜这似乎是在20世纪初制作时的事情。无论如何,我上面展示的这种方法100%解决了这个问题。希望我会看到有人在某处发布这个帖子,因为这样可以节省我三个小时的生命。