我發現我的許多文件都有DOS行結尾。在VI中它們看起來像這樣:「^ M」。 我不想修改沒有這些DOS行結尾的文件。我如何使用bash腳本來做到這一點?謝謝!在Ubuntu上查找並刪除DOS行結尾
EV
我發現我的許多文件都有DOS行結尾。在VI中它們看起來像這樣:「^ M」。 我不想修改沒有這些DOS行結尾的文件。我如何使用bash腳本來做到這一點?謝謝!在Ubuntu上查找並刪除DOS行結尾
EV
grep -URl ^M . | xargs fromdos
的grep讓你有DOS行結束當前目錄下的所有文件的列表。
-U
使得grep的考慮行結尾,而不是默認
-R
剝他們離開使得遞歸
-l
使得它僅列出文件名和不匹配的行
那麼你就管道該列表轉換器命令(這是在Ubuntu的fromdos
,dos2unix
我來自哪裏)。
注意:實際上沒有鍵入^M
。相反,你需要按<Ctrl-V>
然後<Ctrl-M>
來插入^M
字符,並讓grep明白你要做什麼。或者,你可以輸入$'\r'
代替^M
(但我認爲這可能只適用於bash ...)。
,你可以使用命令:
dos2ux file.in>file.out or:
在Perl
:
perl -pi -e 's/\r//g' your_file
或者你可以這樣做:
:%s/[ctrl-V][CTRL-M]//g
許多選項there..you可以與任何的這些嘗試.. http://www.theunixschool.com/2011/03/different-ways-to-delete-m-character-in.html
注意,如果你將多字節文件,你需要採取額外的照顧,並且應該嘗試使用正確的iconv或recode編碼規範。
如果它是一個普通的ASCII文件,下面的兩個方法都可以工作。
flip
該程序在Debian中也被稱爲flip
,可以處理行尾。從手冊:
When asked to convert a file to the same format that it already
has, flip causes no change to the file. Thus to convert all
files to **IX format you can type
flip -u *
and all files will end up right, regardless of whether they were
in MS-DOS or in **IX format to begin with. This also works in the
opposite direction.
或者你可以使用GNU轉碼:
< /etc/passwd recode ..pc | tee a b > /dev/null
file a b
輸出:
a: ASCII text, with CRLF line terminators
b: ASCII text, with CRLF line terminators
轉換爲Unix行結束符:
recode pc.. a b
file a b
輸出:
a: ASCII text
b: ASCII text
重新編碼簡寫DOS行結束作爲pc
,所以用pc..
所述邏輯:從PC格式轉換爲默認值,即與latin1的UNIX行結束。
在Ubuntu上,您使用fromdos
實用
fromdos test.txt
上面的例子將採取一個MS-DOS或Microsoft Windows文件或其他文件不同的行分隔符和格式化新的行分隔符的文件在Linux和Unix中閱讀。
一個使用GNU coreutils
方式:
< file.txt tr -d '\r'
的修改到贏取的答案,如果你需要通過結束
grep -URl ^M . | grep .php | xargs dos2unix
我用DOS2UNIX的,而不是fromdos但效果應該是文件過濾相同。
grep -URL^M。 | xargs fromdos? – Dalinaum
用於安裝的Ubuntu軟件包被稱爲「tofrodos」。 – Apalala
在tcsh上,也可能在csh上,你可以用'grep -URl「\ r獲得同樣的效果。 | xargs fromdos'。 – bdesham