繁体   English   中英

Shell脚本grep仅在文件的最后一行有效

[英]shell script grep only working on last line of file

我有一个从未遇到过的非常奇怪的问题,在这里找不到其他文章的任何相关内容,我有一个shell脚本,它只是在一个while循环中抓取了一个测试主机文件(一旦工作就将使用真实的主机文件),但是它将只输出最后一行:

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

这是/ etc / test / hosts文件:

设备1 192.168.0.1
设备2 192.168.0.2
设备3 192.168.0.3
//切
设备50 192.168.0.50

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

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

如果我将grep命令更改为只echo $line它将正确输出。 我尝试将测试主机文件中的行数更改为越来越少但结果相同。 我还从cli完成了grep命令,它在我grep使用的每个设备上都能正常工作。 我也尝试过将$ line用双引号引起来,但这也没有任何改变。

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

埃里克·雷诺夫(Eric Renouf)通过评论回答的问题。

解:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM