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 替换换行符。