Unix shell脚本删除前面带有特定字符的新行

时间:2016-04-07 12:24:02

标签: shell unix sed newline lf

首先,提前感谢您的帮助。

我需要用unix文件中的空格替换新行(\ n),如果它们前面没有';'。

例如,如果你有一个unix文件,如:

TestFields;TestFields2
;TestFields3;TestFields4

输出应为:

TestFields;TestFields2 ;TestFields3;TestFields4

所以我正在使用这样的sed命令:

sed ':a;N;$!ba;s/[^;]\n/ /g'

问题是这个命令还会替换之前的字符\ n所以我的outpu就像:

TestFields;TestFields ;TestFields3;TestFields4

我放松了'TestFields2'中的'2'.. 有人知道如何保留我的角色但更换\ n?

2 个答案:

答案 0 :(得分:0)

捕获匹配的char并用于替换

$ sed -r ':a;N;$!ba;s/([^;])\n/\1 /g' file
TestFields;TestFields2 ;TestFields3;TestFields4

g后缀可能不需要。

答案 1 :(得分:0)

这可能适合你(GNU sed):

sed ':a;N;/;\n/!s/\n/ /;ta;P;D' file

另一种方法是将整个文件篡改到内存中并在读取问题时读取,即如果换行符之前的字符是;则不执行任何操作,否则用空格替换换行符。