是否有Bash命令将\ r \ n转换为\ n?


19

是否有Bash命令将\ r \ n转换为\ n?

当我将脚本从Windows上传到Linux时,我需要一个类似的工具来使工作正常。


7
dos2unix通常可用,否则sed -e 's/\r$//'
falstro 2010年

1
不,没有Bash命令,但是有dos2unix一个Unix / Linux程序可以执行您想要的操作。
暂停,直到另行通知。

1
为什么不只使用健全的文本编辑器来保存文件时选择换行符呢?
vtest 2010年

Answers:



5

翻译(tr)在所有Unix中都可用:

tr -d '\r'  # From \r\n line end (DOS/Windows), the \r will be removed so \n line end (Unix) remains.

1
也具有删除其他任何对象的副作用\r。但是,它们非常不常见。
ivan_pozdeev

5

使用sed并找到结尾为.txt, .php, .js, .css

 sed -rie 's/\r\n/\n/' \
 $(find . -type f -iregex ".*\.\(txt\|php\|js\|css\)")

5

有一个Unix实用程序conv,可以转换行尾。通常通过与u2dor d2uunix2dosor的软链接来调用它dos2unix

此外,还有名为fromdos和的实用程序todos


2

使用man 1 ed(无需事先备份即可就地编辑文件-与sed .. -i“ .bak” ...不同):

ed -s file <<< $'H\ng/\r*$/s///\nwq'

我什至不知道ed,但它能完成任务(旧但是金)
dwana 2015年

当我正在使用的共享主机上不存在来自其他答案的命令时,此命令对我有用。谢谢:)
FKasa

2

使用POSIX这样做很棘手:

  • POSIX Sed不支持\r\15。即使这样做,就位选项-i也不是POSIX

  • POSIX Awk支持\r\15,但是该-i inplace选项不是POSIX

  • d2udos2unix不是POSIX实用程序,但ex

  • POSIX前不支持\r\15\n或者\12

要删除回车,请执行以下操作:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\r","");print>ARGV[1]}' file

要添加回车符:

awk 'BEGIN{RS="\1";ORS="";getline;gsub("\n","\r&");print>ARGV[1]}' file


0

$ redo dos .. FILE
$ flip -u FILE

(对于非Ubuntu系统,每个也存在,但是这些链接很方便。)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.