(如何)我可以使用sed删除所有换行符(\ n)?

时间:2011-07-13 07:28:17

标签: sed newline

我尝试删除管道中的所有换行符:

(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。

7 个答案:

答案 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)

如果预计foobar不包含新行,那么您必须注意

(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