如何组合以反斜杠字符结尾的所有行?

Cor*_*ein 39 sed awk perl text-processing

使用像 sed 或 awk 这样的常用命令行工具,是否可以连接以给定字符结尾的所有行,如反斜杠?

例如,给定文件:

foo bar \
bash \
baz
dude \
happy
Run Code Online (Sandbox Code Playgroud)

我想得到这个输出:

foo bar bash baz
dude happy
Run Code Online (Sandbox Code Playgroud)

neu*_*ino 31

更短更简单的 sed 解决方案:

sed  '
: again
/\\$/ {
    N
    s/\\\n//
    t again
}
' textfile
Run Code Online (Sandbox Code Playgroud)

或单行如果使用 GNU sed:

sed ':x; /\\$/ { N; s/\\\n//; tx }' textfile
Run Code Online (Sandbox Code Playgroud)


Gil*_*il' 20

这是一个 awk 解决方案。如果一行以 a 结尾\,去掉反斜杠并打印没有终止换行符的行;否则打印带有终止换行符的行。

awk '{if (sub(/\\$/,"")) printf "%s", $0; else print $0}'
Run Code Online (Sandbox Code Playgroud)

它在 sed 中也还不错,尽管 awk 显然更具可读性。


cam*_*amh 20

使用 perl 可能最简单(因为 perl 就像 sed 和 awk,我希望您可以接受):

perl -p -e 's/\\\n//'
Run Code Online (Sandbox Code Playgroud)