2012-07-31 43 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