我知道如何以简单的形式使用 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
它。有几种方法,看看例如这里:
在表达式中使用转义管道符号:
<command that spits out text> | grep "text to find\|another text to find"
grep
与选项一起使用-E
:<command that spits out text> | grep -E "text to find|another text to find"
grep
与选项一起使用-e
:<command that spits out text> | grep -e "text to find" -e "another text to find"
答案2
做这件事有很多种方法
使用 ex 传递多种模式
-e
。somecommand | grep -e foo -e bar -e baz
用一个正则表达式匹配多个模式,例如使用扩展正则表达式交替运算符
|
somecommand | grep -E 'foo|bar|baz'
将模式每行放在一个文件中,然后
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'