首頁 »
2008/11/08

[bash] 移除文字檔中的^M

話說文字檔內多了個^M(是dos檔的關係)要怎麼移除呢?
答案是:
tr -d \\r < dosfile > newfile
最近工作上遇到了怪怪的^M名單:
m=abc@happy.com.tw^M&hid=abc
目標是讓它變成
m=abc@happy.com.tw&hid=abc
由於很多,一個個處理的話就不是RD了,我先寫了支bash script如下來對目錄下的檔案作處理,應急一下(其實我差點忘了有這項工作,今天開會有人提到才想到,thunderbird收信、開信好像比outlook慢很多,有時懶得等,真的會漏看信的內容,真是個危險因子啊~~)
#!/usr/local/bin/bash


if [ -d ./ ]; then
for file in ./*.list ; do
tr -d \\r < $file > $file.new
rm $file
mv $file.new $file
sudo chown happy $file
sudo chgrp users $file

done
fi

有刪節線那二行是與權限相關,第一行判別是目錄是多寫的,為了以後修改時方便。
至於為什麼是^M呢?

這裡有說明:

Dos/windows使用了一種很愚蠢的方案來结束文件的每一行:居然使用了兩個符號RETURN/LINEFEED,而Unix like OS就明智的多,使用一個NEWLINE(就是LINEFEED)。因此,如果在Linux下面閱讀Dos/Windows文件,每一行會顯示一個討厭的 ^M

11/24/2008 updated: 最近發覺可以寫得更精簡:
#!/usr/local/bin/bash

if [ -d ./ ]; then
for file in ./*.list ; do
tr -d \\r < $file > $file.new && mv $file.new $file
done
fi

關鍵字: 名單 目標

[bash] changeName.sh 簡單改名稱←上一篇 │首頁│ 下一篇→[bash] 尋找目錄下檔案裡某特定的字串,並移除它們
本文引用網址: