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
,然后用""替换所有\.但我希望通过脚本完成这项工作.
这是使用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
同一文件快.虽然......写得快.
归档时间: |
|
查看次数: |
6604 次 |
最近记录: |