1

试图删除从 Windows 生成的错误换行符。

$cat -e file.xml
foo^M$
bar$
$
hello world1$
hello world2$

其中应该有“foobar”,中间没有任何换行符,而所有换行符都应该保留。我知道在 emacs 中我们可以用 'RET' 替换 "^M^J",但是我有一个很大的文件,我不想打开它,只想使用命令行来转换它。

我试过dos2unix了,但它只删除了“^M”部分,仍然呈现一个破碎的单词/句子。也试过tr -d '\r'and sed 's:^M$::g'or sed 's:^M$\n:\n:g',都没有用。任何人都知道如何正确地做到这一点?

4

3 回答 3

1

我已将您的示例文件复制为:

$ cat -e so.txt
foo^M$
bar$
line2$
line3$

您可以在“gulp”模式下使用 Perl 来执行以下操作:

$ perl -0777 -pe 's/\r\n//g' so.txt
foobar
line2
line3

使用大多数面向行的方法的问题是将\r\n其读取为一行。


你可以做:

$ perl -pe 's/\r\n//' /tmp/so.txt
foobar
line2
line3

还有……

于 2016-06-14T02:31:35.360 回答
1

使用awk

$ cat -e so.txt
foo^M$
bar$
line2$
line3$

$ awk 1 RS=$'\r\n' ORS= so.txt
foobar
line2
line3

$ awk 1 RS=$'\r\n' ORS= so.txt | cat -e # Just for verification
foobar$
line2$
line3$

它将记录分隔符设置为\r\n& 打印记录ORS=<empty string>

于 2016-06-14T03:37:23.490 回答
0

也许以下将起作用

sed -e 's/[\n\r]//g' old_file.txt > new_file.txt

将工作

于 2016-06-14T02:05:02.990 回答