shell脚本grep只在最后一行文件上工作

时间:2015-06-16 00:20:36

标签: linux bash shell grep

我有一个非常奇怪的问题,我从未遇到过,也找不到与此处其他帖子相关的任何内容,我有一个shell脚本,它只会影响测试主机文件(一旦有效,将使用真正的一个) while循环但它只输出最后一行:

#!/bin/bash
while read line
do
    grep $line /etc/test/hosts
done < temp-file.txt

这是/ etc / test / hosts文件:

  

device1 192.168.0.1
  device2 192.168.0.2
  device3 192.168.0.3
  //切   device50 192.168.0.50

temp-file.txt与用于测试的测试主机文件相同

如上所述,这是输出 - 仅显示最后一行: device3 192.168.0.50

如果我将grep命令更改为echo $line,则输出正确。我已经尝试将测试主机文件中的行数更改为越来越少但结果相同。我也从cli完成了grep命令,它可以在我grep的每个设备上正常工作。我也尝试将$行放在双引号中,但也没有改变任何内容。

我还尝试了使用while IFS="\n"方法的替代while循环但结果相同。这似乎应该非常简单,但我遇到了问题。我做错了什么,或者这可能是bash中的一个错误?

1 个答案:

答案 0 :(得分:1)

Eric Renouf通过评论回答了问题。

溶液:

将sed -i 's/\r$//' temp-file.txt添加到脚本顶部,以删除位于每行末尾的\ r。