bash - 如何使用来自另一个文件的搜索参数来 grep 一个文件

标签 bash grep for-loop

我正在尝试使用包含 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/

相关文章:

bash - 为什么一定要逃走 |和 + 在撇号之间的 grep?

java - 如何在java中使用for循环动态创建二维数组?

linux - 将代码写入输出文件的更快方法

bash - 删除列的一部分,如果它在特定的列号中。 (该列有一个变量)

linux - 脚本 bash chmod 绕一圈

linux - 如何使用sed从字符串中的特定点提取文本?

linux - Live Linux grep 脚本 - 只打印肯定的结果

regex - Linux CLI 更改价格(awk 还是 sed?)

在c中的循环中创建结构体变量

c++ - 优化for循环的函数调用