循环和grep仅将输出写入最后一行

时间:2018-10-02 14:56:59

标签: bash shell grep

我正在循环浏览文本文件中的各行。并在目录的每一行上执行grep。像下面一样

while IFS="" read -r p || [ -n "$p" ]
do
 echo "This is the field: $p"
  grep -ilr $p * >> Result.txt
done < fields.txt

但是上面的代码将结果写入文件的最后一行。而不是其他行。

如果我用其他行手动执行命令,则该命令有效(这意味着找到了匹配项)。我在这里想念的东西吗?谢谢

fields.txt看起来像这样

annual_of_measure__c
attached_lobs__c
apple 

1 个答案:

答案 0 :(得分:1)

文件fields.txt

  1. 具有由两个字符(回车和换行符)和
  2. 组成的DOS / Windows换行约定
  3. 该文件由Unix-Tools处理,期望Unix行尾仅包含一个字符(换行符)

然后,由read命令读取并存储在变量$p中的行位于第一行annual_of_measure__c\r中(请注意,附加了\r用于回车) 。然后grep将找不到匹配项。

从您对问题的描述和注释中的确认来看,fields.txt的最后一行似乎根本没有行尾,因此变量$p是普通字符串{{1} }和grep可以在文件的最后一行找到匹配项。

有些工具可以转换行距,例如参见this answereven more options in this answer