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

j.l*_*.l. 5 newline sed

我试图删除管道中的所有换行符,如下所示:

(echo foo; echo bar) | sed -e :a -e N -e '$!ba' -e 's/\n/ /g' | hexdump -C
Run Code Online (Sandbox Code Playgroud)

导致debian挤压的结果如下:

00000000  66 6f 6f 20 62 61 72 0a                           |foo bar.|
00000008
Run Code Online (Sandbox Code Playgroud)

不删除尾随换行符.

tr -d '\n'如在如何从文本文件中删除换行符?工作得很好,但不是sed.

小智 17

您需要将 \n 替换为其他内容,而不是删除它。因为行由 \n 分隔(至少在 GNU/Linux 上),所以您需要告诉 sed 使用 -z 查找其他 EOL 字符,如下所示:

> echo -e "remove\nnew\nline\ncharacter" | sed -z "s/\n//g"
removenewlinecharacter> 
Run Code Online (Sandbox Code Playgroud)

sed --help

  -z, --null-data
                 separate lines by NUL characters
Run Code Online (Sandbox Code Playgroud)

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
>
Run Code Online (Sandbox Code Playgroud)

使用 /d 将删除包含 EOL 的每一行,即所有行。(一)

> echo -e "remove\nnew\nline\ncharacter" | sed -z "/\n/d"
> 
Run Code Online (Sandbox Code Playgroud)

华泰


Kev*_*ton 8

抱歉无法使用sed完成,请参阅: http ://sed.sourceforge.net/sedfaq5.html#s5.10并在此处讨论:http://objectmix.com/awk/26812-sed-remove-最后,新线2.HTML

看起来sed将添加\n,如果它作为最后一个字符存在.