如何将^M$换行符从dos转换为Unix(dos2unix不起作用)



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

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

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

我尝试了dos2unix但它只删除了"^M"部分,仍然呈现一个损坏的单词/句子。还尝试了tr -d 'r'sed 's:^M$::g'sed 's:^M$n:n:g',都不起作用。有人知道如何正确做到这一点吗?

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

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

你可以在"gulp"模式下使用 Perl 来做:

$ perl -0777 -pe 's/rn//g' so.txt
foobar
line2
line3

使用大多数面向线的方法的问题在于rn被读取为一条线。


你可以做:

$ perl -pe 's/rn//' /tmp/so.txt
foobar
line2
line3

也。。。

使用 awk

$ cat -e so.txt
foo^M$
bar$
line2$
line3$
$ awk 1 RS=$'rn' ORS= so.txt
foobar
line2
line3
$ awk 1 RS=$'rn' ORS= so.txt | cat -e # Just for verification
foobar$
line2$
line3$

它将记录分隔符设置为rn并打印带有ORS=<empty string>的记录

也许以下内容会起作用

sed -e 's/[nr]//g' old_file.txt > new_file.txt

将工作

相关内容

  • 没有找到相关文章

最新更新