我试图删除管道中的所有换行符,如下所示:
(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)
-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)
华泰
抱歉无法使用sed完成,请参阅: http ://sed.sourceforge.net/sedfaq5.html#s5.10并在此处讨论:http://objectmix.com/awk/26812-sed-remove-最后,新线2.HTML
看起来sed将添加\n,如果它作为最后一个字符存在.