如果我打开在Windows中创建的文件,所有行都以^M结尾。如何一次删除这些字符?
当前回答
通常有一个dos2unix命令可以用于此操作。只需确保您阅读了手册,因为GNU和BSD版本在如何处理参数方面有所不同。
BSD版本:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU版本:
dos2unix $FILENAME
或者,您可以使用此处建议的任何答案创建自己的dos2unix,例如:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
其他回答
通常有一个dos2unix命令可以用于此操作。只需确保您阅读了手册,因为GNU和BSD版本在如何处理参数方面有所不同。
BSD版本:
dos2unix $FILENAME $FILENAME_OUT
mv $FILENAME_OUT $FILENAME
GNU版本:
dos2unix $FILENAME
或者,您可以使用此处建议的任何答案创建自己的dos2unix,例如:
function dos2unix(){
[ "${!}" ] && [ -f "{$1}" ] || return 1;
{ echo ':set ff=unix';
echo ':wq';
} | vim "${1}";
}
如果您在Windows中的Notepad或Notepad++中创建文件,将其带到Linux,然后用Vim打开,您将在每行末尾看到^M。为了去除这一点,
在Linux终端上,键入
dos2unix filename.ext
这将产生所需的魔力。
将文件目录从DOS转换为Unix
使用命令行和sed,查找当前目录中扩展名为“.ext”的所有文件,并删除所有“^M”
@ https://gist.github.com/sparkida/7773170
find $(pwd) -type f -name "*.ext" | while read file; do sed -e 's/^M//g' -i "$file"; done;
此外,如前一个答案所述,^M=Ctrl+V+Ctrl+M(不要只键入插入符号“^”和M)。
:%s/\r\+//g
在Vim中,它去掉所有回车符,只留下换行符。
:g/Ctrl-v Ctrl-m/s///
CtrlM是字符\r,或回车符,DOS行结尾添加该字符。CtrlV告诉Vim在命令行中插入文字CtrlM字符。
作为一个整体,该命令将所有\r替换为无,并将它们从行的末尾删除。