如何使用多个字符串进行 grep 查找

如何使用多个字符串进行 grep 查找

我知道如何以简单的形式使用 grep:

<command that spits out text> | grep "text to find"

我希望能够grep同时处理多个不同的文本片段。我该怎么做?grep执行此操作的正确命令是什么?

例子

我运行arp-scan并获取设备及其 mac 地址的列表。我想搜索是否存在多个唯一的 mac 地址字符串。如果我只想要 1 个 mac 地址,我会grep这样使用:

arp-scan --localnet --interface=<my interface> | grep "mac address"

我听说过sed,但我不知道它是否适合我的用例。

答案1

你可以使用 grep它。有几种方法,看看例如这里

  1. 在表达式中使用转义管道符号:

    <command that spits out text> | grep "text to find\|another text to find"
    
  2. grep与选项一起使用-E

    <command that spits out text> | grep -E "text to find|another text to find"
    
  3. grep与选项一起使用-e

    <command that spits out text> | grep -e "text to find" -e "another text to find"
    

答案2

做这件事有很多种方法

  1. 使用 ex 传递多种模式-e

    somecommand | grep -e foo -e bar -e baz
    
  2. 用一个正则表达式匹配多个模式,例如使用扩展正则表达式交替运算符|

    somecommand | grep -E 'foo|bar|baz'
    
  3. 将模式每行放在一个文件中,然后grep通过-f选项 ex 将文件传递给。

    somecommand | grep -f patfile 
    

    在哪里

    $ cat patfile
    foo
    bar
    baz
    

答案3

如果你想在查询字符串后 grep 多行,你可以使用它

grep -A 3 "your query string" your_file

3是您想要在条件后看到的行号。

查询后的行号:-A NUM, --after-context=NUM

您的查询前的行号:-B NUM, --before-context=NUM

请记住,您始终可以使用-i选项来忽略区分大小写 your_first_command | grep -i 'your query string' 'your file_name'

相关内容