在读取文本文件时删除CR(\ r)

时间:2012-07-31 06:14:42

标签: bash

我有这个脚本,我在逐行读取文本文件并执行命令。我发现字符串(又名行)始终以'\r'结尾。

我想从字符串的末尾删除CR。

这就是我的代码的样子:

file="myfilelist.txt"

while IFS= read -r filename
do

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

done <"$file"

我希望能够在每个行字符串(也就是文件名)的末尾没有\r的循环中执行命令。

1 个答案:

答案 0 :(得分: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的情况下可能认出的技术。