当前行以^ M结尾时,在文件中追加下一行

Kar*_*k S 3 ruby bash perl awk sed

我有一个从工具输出的文件(从DB查询).其中一个字段在某些行的末尾有^ M个字符.这会导致我的输出被破坏.当前行以^ M结尾时,如何将下一行附加到当前行.

我的机器安装了sed,awk,perl,ruby和python,我正在使用bash.

我使用sed尝试了以下方法:

sed -e :a -e '/^M$/N; s/^M\n//; ta' sourcefile > destfile
Run Code Online (Sandbox Code Playgroud)

但那没用.

请指教.

谢谢,Karthick S.

AVe*_*Vee 5

您看到的^ M字符实际上可能是回车.您应该匹配正则表达式中使用\ r的那些.数据可能是由一个系统插入到数据库中的,该系统使用CRLF作为行结尾(Windows最有可能)而不仅仅是LF(像大多数*nix系统那样).我猜他们已经跟着换行了,所以你可能想要删除它们,而不是用换行符替换它们.

您可能在系统上有dos2unix命令,可以为您转换这些行结尾.

您可能希望首先使用dos2unix确保行结尾是一致的.之后你可以删除这样的新行:cat infile | dos2unix | tr -d '\n' > outfile.如果你想要一个可以使用的破折号空间cat infile | dos2unix | tr '\n' ' ' > outfile.

作为旁注,使用sed删除换行是很困难的,因为sed编辑文件中的行一次处理一行.