我想使用grep在文件中搜索多个内容。我试图将两个grep线组合在一起,这是不成功的。要搜索多个字符串,我正在执行以下操作:
grep 'a\|b\|c' file
要搜索包含标签的字符串,我使用以下内容:
grep -P '1\ta' file
但要搜索多个字符串,所有包含选项卡的组合都不起作用:
grep -P '1\ta\|2\tb\|3\tc' file
有办法做到这一点吗?
答案 0 :(得分:2)
grep中的扩展正则表达式模式也应该有效:
grep -E '1\ta\|2\tb\|3\tc' file
答案 1 :(得分:1)
将comment转换为答案。
考虑使用Bash' ANSI C quoting:
grep -P $'1\ta\|2\tb\|3\tc' file
我注意到你的第一个命令使用了\|
- 你可能需要在第三个命令中避免使用反斜杠:
grep -P $'1\ta|2\tb|3\tc' file # Recommended solution to immediate problem
答案 2 :(得分:0)
我个人使用awk,因为它理解扩展的正则表达式语法和转义序列,例如\t
就好了:
awk '/1\ta|2\tb|3\tc/' file
在这种情况下,使用特定于bash($''
)或GNU grep(-P
)的特性似乎有点过分了。
这是您可能要考虑的其他选项:
grep -Ff patterns file
其中patterns
是包含您要匹配的固定字符串的文件,例如:
1 a
2 b
(文件中包含文字制表符)。 -F
开关匹配固定字符串。