2012-07-31 47 views
1

我有這個腳本,我正在逐行閱讀文本文件並執行命令。我發現字符串(又名線)始終以'\r'結尾。在閱讀文本文件時刪除CR( r)

我想從字符串的末尾刪除CR。

這是我的代碼看起來像:

file="myfilelist.txt" 

while IFS= read -r filename 
do 

git log --oneline -- ${filename} |wc -l 

done <"$file" 

我想能夠在不\r在每行字符串(又名文件名)結束在循環執行的命令。

+0

解決!我使用以下 – user1564015 2012-07-31 06:27:50

+2

指出答案解決您的問題的常用方法是通過單擊複選標記來接受它。 – 2012-07-31 06:35:08

回答

8

試試這個:

git log --oneline -- $(echo "$filename" | tr -d '\r') | wc -l 

注意,當$filename由空格包圍你不需要花括號。

原則,你也可以通過bash的自己的參數膨脹機構這樣做:

git log --oneline -- ${filename%^M} | wc -l 

^M必須是文字控制-M字,這是醜陋,難以維護。

或者你可以在名稱(包括^M以及空格,製表符等)結束刪除所有空格字符:

git log --oneline -- ${filename%[-[:space:]]} | wc -l 

但現在我們正在進入技術很少人們很可能會在沒有閱讀的情況下認出the manual

+0

我總是忘了tr ..一定要努力freudy! – FreudianSlip 2012-07-31 06:25:16

+0

謝謝!我只是修復並更正了我的帖子:) – user1564015 2012-07-31 06:29:51

+0

@ user1564015:請不要這樣做。通過刪除您遇到問題的代碼,可以讓其他人更加難以弄清楚發生了什麼。我將恢復您的修改,將問題恢復原樣。 – 2012-07-31 06:36:19