我尝试在运行b
sed
替换换行符bash
$> echo 'abc' | sed 's/b/\n/'
anc
不,那不是它
$> echo 'abc' | sed 's/b/\\n/'
a\nc
不,那也不是。我想要的输出是
a
c
HELP!
答案 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%解决了这个问题。希望我会看到有人在某处发布这个帖子,因为这样可以节省我三个小时的生命。