用正则表达式grep多个模式

时间:2014-06-16 11:08:33

标签: bash grep

以下是文字:

this is text this is text this is text this is text pattern_abc"00a"this is text this is text this is text this is textthis is text this is text pattern_def"001b"this is text this is text

在输出中,我想:

00a
001b

注意:我查找的值是随机长度和内容

我使用2个表达式:

exp_1 = grep -oP "(?<=pattern_abc\")[^\"]*"
exp_2 = grep -oP "(?<=pattern_def\")[^\"]*"

egrep不起作用(我得到了“egrep:egrep只能使用egrep模式语法”)

我试试:

cat test | exp_1 && exp_2 
cat test | (exp_1 && exp_2) 
cat test | exp_1 | exp_2
cat test | (exp_1 | exp_2)

最后:

grep -oP "((?<=pattern_abc\")[^\"]* \| (?<=pattern_def\")[^\"]*)" test 
 grep -oP "((?<=pattern_abc\")[^\"]* | (?<=pattern_def\")[^\"]*)" test 

有什么想法吗? 非常感谢你!

3 个答案:

答案 0 :(得分:2)

您可以使用此grep

grep -oP "(?<=pattern_(abc|def)\")[^\"]*" file

答案 1 :(得分:1)

您可以像这样使用awk

awk -F\" '{for (i=2;i<NF;i+=2) print $i}' file
00a
001b

如果pattern_*很重要,您可以使用此gnu awk(由于RS

awk -v RS="pattern_(abc|def)" -F\" 'NR>1{print $2}'
00a
001b

答案 2 :(得分:0)

另一种通过grep与Perl-regex选项的方法,

$ grep -oP '\"\K[^\"]*(?="this)' file
00a
001b

仅当您要匹配的字符串后跟"this时才有效。

您可以使用以下命令组合两种搜索模式

$ grep -oP 'pattern_abc"\K[^"]*|pattern_def"\K[^"]*' file
00a
001b