gpt4 book ai didi

regex - bash grep regex - 不包括子模式

转载 作者:行者123 更新时间:2023-11-29 09:10:07 27 4
gpt4 key购买 nike

我有一个用 bash 编写的脚本,其中有一个我需要修改的特定 grep 命令。

通常我有两种模式:A 和 B。有一个文本文件可以包含包含这些模式所有可能组合的行,即:"xxxAxxx", "xxxBxxx", "xxxAxxxBxxx", "xxxxxx",其中"x"是任意字符。

我需要匹配所有只包含“A”的行。

目前,它是用“grep -v (A)”完成的,但这是一个错误的轨道,因为这也会排除带有“xxxAxxxBxxx”的行 - 这对我来说没问题.这就是它需要修改的原因。 :)

棘手的部分是,这个 grep 位于一个“多重管道”命令的中间,其中包含许多其他 grep、seds 和 awk。因此,形成一个更智能的模式将是最好的解决方案。其他人会在更改那里的其他命令时导致很多额外的工作,甚至会影响代码的其他部分。

因此,问题是:是否有可能在一个 grep 中匹配模式并排除子模式,但允许它们同时出现在一行中?

例子:一个文件包含这些行:

fooTHISfoo
fooTHISfooTHATfoo
fooTHATfoo
foofoo

我需要匹配

fooTHISfooTHATfoo
fooTHATfoo
foofoo

不允许包含“THIS”的行。

最佳答案

您可以使用这个 awk 命令:

awk '!(/THIS/ && !/THAT/)' file
fooTHISfooTHATfoo
fooTHATfoo
foofoo

或者通过反转 bool 表达式:

awk '!/THIS/ || /THAT/' file
fooTHISfooTHATfoo
fooTHATfoo
foofoo

关于regex - bash grep regex - 不包括子模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32764107/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com