grep包括字符串中的选项卡和多个搜索

时间:2016-03-15 23:28:37

标签: bash grep

我想使用grep在文件中搜索多个内容。我试图将两个grep线组合在一起,这是不成功的。要搜索多个字符串,我正在执行以下操作:

grep 'a\|b\|c' file

要搜索包含标签的字符串,我使用以下内容:

grep -P '1\ta' file

但要搜索多个字符串,所有包含选项卡的组合都不起作用:

grep -P '1\ta\|2\tb\|3\tc' file

有办法做到这一点吗?

3 个答案:

答案 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开关匹配固定字符串。