转义sedreplacestring中的换行符

这里是我尝试在运行bashsedreplace一个换行符

 $> echo 'abc' | sed 's/b/\n/' anc 

不,不是的

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

不,那也不是。 我想要的输出是

 a c 

帮帮我!

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

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

添加一个黑色的斜线,然后回车并完成您的sed语句。

你没有说你想全球取代所有b 。 如果是,你需要tr代替:

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

适用于Solaris 5.8和bash 2.03

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

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

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

你错过了围绕\n

在一个多行文件中,我必须通过sed两端的tr来传递,如下所示:

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

看到unix喜欢删除换行符和额外的领先空间以及各种各样的东西,因为我想这似乎是在20世纪初的时候要做的事情。 无论如何,我上面显示的这个方法解决了100%的问题。 希望我能看到有人把这个帖子发到某个地方,因为这会为我节省大约三个小时的生命。