我正在尝试使用包含 IP 地址的文件作为搜索 Cisco 防火墙配置文件的基础。通常,我会使用类似的东西:
for i in $(cat ip.file); do grep $i fw.config; done
但是这样做绝对没有任何返回。如果我将上面的脚本放入一个文件中并使用 bash -xv 标志执行它,每一行都会返回如下内容:
+ for i in '`cat ip.file`'
+ grep $'1.2.3.4\r' fw.config (each IP address is different)
grep 1.2.3.4 fw.config 正是我想要发生的,但我从这个命令中没有得到任何返回。
我知道 grep -f 选项,但它也没有返回任何内容。我不是经验丰富的编码员,所以我可能会忽略一些明显的事情。
最佳答案
看起来 ip.file
是 DOS 格式并且有 \r\n
行结尾。在其上运行 dos2unix
以转换为 UNIX 格式。这将消除使 grep
困惑的错误 \r
回车。
顺便说一句,您可以使用grep -f FILE
将要搜索的模式列表传递给grep
。然后它将执行一次搜索以搜索任何这些模式。
# After doing `dos2unix ip.file'...
grep -f ip.file fw.config
# Or...
grep -f <(dos2unix < ip.file) fw.config
关于bash - 如何使用来自另一个文件的搜索参数来 grep 一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3623047/