用 sed 中的换行符替换 \n

Avi*_*Raj 34 sed newlines

我对 GNU sed、 POSIXsed和 BSDsed的无数选项感到很困惑。如何\n使用这三种sed类型用换行符替换文字?

unx*_*nut 44

sed 's/\\n/\
/g'
Run Code Online (Sandbox Code Playgroud)

请注意在替换字符串中点击 return 之前的反斜杠。

  • @AvinashRaj。那是 POSIX,并在 1979 年在 Unix v7 中使用原始的 `sed` 命令。唯一可能不起作用的地方是非 POSIX 精简的 `sed` 实现,例如一些精简的基于 busybox 的实现。这在 csh 中不起作用,但这是一个 csh 问题。 (11认同)

ter*_*don 16

由于您已经有了便携式sed答案,因此sed如果您需要以某种方式操作换行符,我只会提到这很少是最好的工具。Perl 几乎和 一样可移植sed,默认安装在大多数 *nix 系统上,可以很容易地处理这个问题:

printf '%s\n' 'aa\nbb' | perl -pe 's/\\n/\n/g'
Run Code Online (Sandbox Code Playgroud)

另一个非常便携的选择是awk

printf '%s\n' 'aa\nbb' | awk  '{gsub("\\\\n","\n")};1'
Run Code Online (Sandbox Code Playgroud)

在 Solaris 上,请记住使用 /usr/xpg4/bin 中的标准 awk,/bin 中的 awk 是历史版本,不应用于新脚本。

  • @arielCo:为了 `awk` 的可移植性,坚持使用符合 POSIX 的 `awk` 版本,并且只使用这些功能,你应该没问题。在 Solaris 上,您会找到一个名为 `/usr/xpg4/bin/awk` 的文件。 (2认同)