Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式查找包含或不包含foo_bar的所有行_Regex_Grep - Fatal编程技术网

Regex 正则表达式查找包含或不包含foo_bar的所有行

Regex 正则表达式查找包含或不包含foo_bar的所有行,regex,grep,Regex,Grep,我很难写出一个正则表达式,将其放入grep中,以匹配所有包含foo_-bar的行和所有其他不包含foo_-bar的行(foo_-bar除外,应该仍然匹配) 因此: foo_bar Line 1 foo_baz Line 2 Line 3 foo_biz Line 4 我想退回第1行和第3行 请注意,我不能只匹配非富巴兹和非富比兹,因为巴兹和比兹可以有很多很多东西。它必须是foo.*您需要将postivie匹配和负数匹配结合起来 因此,foo_bar的积极匹配1 foo_bar 那么负匹配2对

我很难写出一个正则表达式,将其放入grep中,以匹配所有包含foo_-bar的行和所有其他不包含foo_-bar的行(foo_-bar除外,应该仍然匹配)

因此:

foo_bar Line 1
foo_baz Line 2
Line 3
foo_biz Line 4
我想退回第1行和第3行


请注意,我不能只匹配非富巴兹和非富比兹,因为巴兹和比兹可以有很多很多东西。它必须是foo.*

您需要将postivie匹配和负数匹配结合起来 因此,foo_bar的积极匹配1

foo_bar
那么负匹配2对于所有这一切都不包含foo_uu使用堆栈溢出很好的解释

在altnernative regexp中组合这两者

(foo_bar|^((?!foo_.*).)*$)
现在让我们试试::

    $ cat <<EOF | perl -ane ' /(foo_bar|^((?!foo_.*).)*$)/ && print $_'
    > foo_bar 1
    > fee_foo
    > foo bar
    > foo_buz RT
    > fo_foo 1 
    > fo_ foo_bar
    > EOF
对于sed:

sed -n '/foo_bar/p;/foo_/!p' input

这告诉sed在默认情况下不打印(
-n
),并且在
foo_bar
匹配或
foo_
不匹配时打印。

在OS X下,我对您的输入执行以下命令:

$ grep -P -v '^foo_(?!bar)' test.txt 
foo_bar Line 1
Line 3
请注意:

-P, --perl-regexp
       Interpret PATTERN as a Perl regular expression.
-v, --invert-match
       Invert the sense of matching, to select non-matching lines.

我也有同样的想法。。你快了1分钟。:)这很好-在^和foo之间添加了一个.*的小修改,效果非常好。你说得对。我的答案基于你的例子,但你说它可能在文本中的任何地方。使用grep,您可以删除
^
,而不必添加
*
$ grep -P -v '^foo_(?!bar)' test.txt 
foo_bar Line 1
Line 3
-P, --perl-regexp
       Interpret PATTERN as a Perl regular expression.
-v, --invert-match
       Invert the sense of matching, to select non-matching lines.