使用shell脚本合并txt文件的行

aru*_*zhi 3 unix vi bash shell

我从shell脚本调用一个程序,它用这种格式创建一个输出文件:

aaaaa\
bbbbb\
ccccc\
Run Code Online (Sandbox Code Playgroud)

我想将此更改为:

aaaaabbbbbccccc
Run Code Online (Sandbox Code Playgroud)

在VI编辑器中我可以做ggVGJ,然后用""替换所有\.但我希望通过脚本完成这项工作.

Ste*_*eve 5

这是使用GNU的一种方式sed:

sed ':a; N; $!ba; s/\\\n//g; s/\\$//' file
Run Code Online (Sandbox Code Playgroud)

使用的另一种方式awk,可能会给你更好的表现:

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

结果:

aaaaabbbbbccccc
Run Code Online (Sandbox Code Playgroud)

说明:

awk解决方案删除了​​尾部反斜杠(通过替换)和printf的每一行(没有换行符).END(在脚本末尾执行)然后打印换行符.这优于sed解决方案,该解决方案创建一个名为的标签a,并将下一行输入附加到模式空间中.$!ba表示'如果不是在输入的最后一行,则分支到标签a'.然后第一个替换从模式空间中删除每个反斜杠和换行符.第二个替换删除最后一个尾随反斜杠.对于小文件,此解决方案应该快速,但可能不会比awk同一文件快.虽然......写得快.