我尝试删除管道中的所有换行符:
(echo foo; echo bar) | sed -e :a -e N -e '$!ba' -e 's/\n/ /g' | hexdump -C
导致debian挤压的结果:
00000000 66 6f 6f 20 62 61 72 0a |foo bar.|
00000008
不删除尾随换行符。
<{3}}中的 tr -d '\n'
效果很好但不是sed。
答案 0 :(得分:7)
抱歉无法使用sed,请参阅: http://sed.sourceforge.net/sedfaq5.html#s5.10 并在此讨论:http://objectmix.com/awk/26812-sed-remove-last-new-line-2.html
看起来sed会添加\ n,如果它作为最后一个字符存在。
答案 1 :(得分:1)
如果您要删除最后一个\n
,则需要使用外部实用程序,或使用例如awk
。
printf "%s" `(echo foo; echo bar) | sed -e :a -e N -e '$!ba' -e 's/\n/ /g'`
应该有用。
答案 2 :(得分:0)
{ echo foo; echo bar; } | awk '{printf("%s ", $0)}'
答案 3 :(得分:0)
比较: (echo foo; echo bar)| sed -e:a -e N -e'$!ba'-e's / \ n / / g'| hexdump -C 同 (echo foo; echo bar)| tr -d'\ n'| hexdump -C 然后用 echo foo;回音栏)| hexdump -C | sed -e:a -e N -e'$!ba'-e's / \ n / / g'
答案 4 :(得分:0)
如果预计foo
和bar
不包含新行,那么您必须注意
(echo foo; echo bar)
将在每个echo
(echo -n foo; echo -n bar)
不会在输出结尾添加新行。 因此,即使它确实删除了尾随行,也可能根本不需要使用sed删除新行。
答案 5 :(得分:0)
您需要将 \n 替换为其他内容,而不是将其删除。并且由于行由 \n 分隔(至少在 GNU/Linux 上),因此您需要告诉 sed 使用 -z 查找其他一些 EOL 字符,如下所示:
> echo -e "remove\nnew\nline\ncharacter" | sed -z "s/\n//g"
removenewlinecharacter>
sed 通常会删除整行(使用 /d),如下所示:
> echo -e "remove\nnew\nline\ncharacter" | sed "/rem\|char/d"
new
line
> echo -e "remove\nnew\nline\ncharacter" | sed -r "/rem|char/d"
new
line
>
使用 /d 将删除包含 EOL 的每一行,这些都是行。 (一)
> echo -e "remove\nnew\nline\ncharacter" | sed -z "/\n/d"
>
HTH
答案 6 :(得分:-1)
您也可以尝试:
(echo foo; echo bar) | sed 's/\n//' | xargs echo -n