我有以下带有 ^M (回车)的行。我想删除 ^M+ 行。您可以注意到每个 ^M 之后都有一个新行,这是不希望的。我的目的是删除控制字符并制作一行 CSV。
'1.0';'';'';'';'Mon Jul 04 00:00:00 CEST 2016';'To cash Pls Acc 4142^M
To cash Pls Acc 4142';'To cash Pls Acc 4142^M
Money';'236159';'236159';'-2000.0';'';'2000.0'
我尝试跟随但没有成功。注:^M = 控制 v + 控制 m
cat file.csv | sed 's/[\^M\n]//g' > new_file.csv
上面的行删除了^M,但该行仍然被新行断开。
预期产出
'1.0';'';'';'';'Mon Jul 04 00:00:00 CEST 2016';'To cash Pls Acc 4142To cash Pls Acc 4142';'To cash Pls Acc 4142 Money';'236159';'236159';'-2000.0';'';'2000.0'
答案1
这适用于您的情况:
sed -i ':a;N;$!ba;s/\r\n//g' file.csv
或者这个:
sed -e :a -e '/\r$/N; s/\r\n//; ta' file.csv
从:http://www.catonmat.net/blog/sed-one-liners-explained-part-one/
请注意,您不需要使用,如果需要,cat
您可以直接使用该选项编辑文件。-i
答案2
它\r
不是^M
。最简单的方法是:
tr -d '\n-\r' < file.
-d
表示删除,\n-\r
是删除的字符范围tr
。
请注意,此代码还将删除\n
前面没有“ ^M
”的出现。