以下是文字:
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
有什么想法吗? 非常感谢你!
答案 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