Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
Bash 如何使用nand(负数和)逻辑表达式进行grep?_Bash_Grep - Fatal编程技术网

Bash 如何使用nand(负数和)逻辑表达式进行grep?

Bash 如何使用nand(负数和)逻辑表达式进行grep?,bash,grep,Bash,Grep,给出了两个单词/模式:P1和P2。如何使用grep实现管道过滤器,该过滤器抑制以P1结尾的每行,除了包含P2的 编辑:示例,其中P1为“确定”,P2为“重新定义”: 应该通过 X X not found. : X ; Redefine X. ok. ok. is not at end of line ? 应该予以压制 : X ; ok. 见: 检查请参见: 选中,因为“抑制P1$,除非包含P2”类似于“允许P1后跟某物或P2后跟任何东西,最后后跟P1”: 因为“抑制P1$,除非包

给出了两个单词/模式:P1和P2。如何使用
grep
实现管道过滤器,该过滤器抑制以P1结尾的每行,除了包含P2的

编辑:示例,其中P1为“确定”,P2为“重新定义”:

  • 应该通过

    X X not found.
    : X ;  Redefine X.  ok.
    ok. is not at end of line
    ?
    
  • 应该予以压制

    : X ;   ok.
    
  • 见:

    检查

    请参见:

    选中

    ,因为“抑制P1$,除非包含P2”类似于“允许P1后跟某物或P2后跟任何东西,最后后跟P1”:

    因为“抑制P1$,除非包含P2”类似于“允许P1后面跟着某物或P2后面跟着任何东西,最后跟着P1”:


    如果Awk解决方案是可接受的,那么它是直接的

    awk '/P2/ || !/P1$/' file
    
    grep-p
    你可以说

    grep -P 'P2|(?!P1$).{0,2}$' file
    

    但这更难理解,也不便于携带。还要注意的是,最后一个量词需要更新以匹配P1的长度(如果行太短而不能完全包含它,则应允许比P1短的字符串)。

    如果Awk解决方案是可接受的,则它是简单的

    awk '/P2/ || !/P1$/' file
    
    grep-p
    你可以说

    grep -P 'P2|(?!P1$).{0,2}$' file
    


    但这更难理解,也不便于携带。还请注意,最后一个量词需要更新以匹配P1的长度(如果行太短而无法完全包含它,则应允许字符串比P1短).

    你能展示一个最简单的可测试的例子,并添加你迄今为止尝试过的内容吗?并根据我的理解,在标题中更正你的英语,更新为几个角案例;请回顾一下。嗯,这是sed的工作,但我不会为你写代码。。。让我们看看你已经尝试了什么。@tripleee,谢谢你的更新。你能展示一个最小的可测试的例子,并添加你迄今为止尝试过的内容吗?并在标题中更正你的英语。根据我的理解,更新了几个角案例子;请回顾一下。嗯,这是sed的工作,但我不会为你写代码。。。让我们看看你已经尝试了什么。@tripleee,谢谢你的帮助update@Gilles:我喜欢你对regex上下文的引用。我希望我一生中做的每一次grep都能得到一美元,但我是一个回头看/向前看/四处看的新手。我很欣赏这个引用。规则是:如果不包含P1,则传递它;如果包含P1,则抑制它;如果同时包含P1和P2,则传递它。@ivand58:您对规则的描述在行尾的P1地址在哪里?i、 e.“抑制以P1结尾的每一行”。我肯定它在那里,我只是看不到。@Gilles:我喜欢你对正则表达式上下文的引用。我希望我一生中做的每一次grep都能得到一美元,但我是一个回头看/向前看/四处看的新手。我很欣赏这个引用。规则是:如果不包含P1,则传递它;如果包含P1,则抑制它;如果同时包含P1和P2,则传递它。@ivand58:您对规则的描述在行尾的P1地址在哪里?i、 e.“抑制以P1结尾的每一行”。我肯定它在那里,我只是看不到。谢谢,它解决了问题。在给定的示例中,脚本是
    awk'/redefinite/| | |/好的[.]$/'
    p.s.grep因为某种原因不起作用
    |grep-p'重新定义|(?!好的[.]$).{0,2}$'
    就像它在回答中说的,对于长度为3的字符串,量词必须是
    {0,3}
    。grep是“grep(GNU grep)2.25”,它将输出着色,但所有内容都传递给stdouthanks,它解决了这个问题。在给定的示例中,脚本是
    awk'/redefinite/| | |/好的[.]$/”
    p.s.grep由于某种原因不起作用
    |grep-p'重新定义|(?!好的[.]$).{0,2}$'
    就像它在回答中说的,对于长度为3的字符串,量词必须是
    {0,3}
    。grep是“grep(GNU grep)2.25”,它将输出着色,但所有内容都传递给stdout