Unix shell 脚本删除以特定字符开头的新行
Unix shell script to remove new lines preceded with specific characters
首先,预先感谢您的帮助。
我需要在 unix 文件中用 space 替换新行 (\n),因为它们前面没有“;”。
例如,如果您在一个 unix 文件中有如下内容:
TestFields;TestFields2
;TestFields3;TestFields4
输出应该是:
TestFields;TestFields2 ;TestFields3;TestFields4
所以我正在使用这样的 sed 命令:
sed ':a;N;$!ba;s/[^;]\n/ /g'
问题是这个命令也会替换 \n 之前的字符,所以我的输出是这样的:
TestFields;TestFields ;TestFields3;TestFields4
我把 'TestFields2' 中的 '2' 松了..
有人知道如何保留我的角色但替换 \n 吗?
捕获匹配的字符并用于替换
$ sed -r ':a;N;$!ba;s/([^;])\n/ /g' file
TestFields;TestFields2 ;TestFields3;TestFields4
可能不需要 g 后缀。
这可能适合您 (GNU sed):
sed ':a;N;/;\n/!s/\n/ /;ta;P;D' file
另一种方法是将整个文件放入内存并在阅读问题时读取,即如果换行符前面的字符是 ;
什么都不做,否则用 space 替换换行符。
首先,预先感谢您的帮助。
我需要在 unix 文件中用 space 替换新行 (\n),因为它们前面没有“;”。
例如,如果您在一个 unix 文件中有如下内容:
TestFields;TestFields2
;TestFields3;TestFields4
输出应该是:
TestFields;TestFields2 ;TestFields3;TestFields4
所以我正在使用这样的 sed 命令:
sed ':a;N;$!ba;s/[^;]\n/ /g'
问题是这个命令也会替换 \n 之前的字符,所以我的输出是这样的:
TestFields;TestFields ;TestFields3;TestFields4
我把 'TestFields2' 中的 '2' 松了.. 有人知道如何保留我的角色但替换 \n 吗?
捕获匹配的字符并用于替换
$ sed -r ':a;N;$!ba;s/([^;])\n/ /g' file
TestFields;TestFields2 ;TestFields3;TestFields4
可能不需要 g 后缀。
这可能适合您 (GNU sed):
sed ':a;N;/;\n/!s/\n/ /;ta;P;D' file
另一种方法是将整个文件放入内存并在阅读问题时读取,即如果换行符前面的字符是 ;
什么都不做,否则用 space 替换换行符。