一行中的多个awk模式匹配

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一行中的多个awk模式匹配相关的知识,希望对你有一定的参考价值。

假设我要匹配文件中的foobar。以下作品:

/foo/commands/bar/commands注意:/foo/commands/bar/commands之间没有分隔符。

以下内容也不错:

[/foo/commands1commands2其中每行执行commands2,而我省略了该模式。

但是如果我想省略这些命令怎么办? awk的语法规则是什么?以下无效:

/foo//bar/

当然,我可以将其写为/foo/print/bar/print,但我想知道分隔段的分隔符是什么,为什么有时需要而有时却不需要。

答案

awkregexp的方法上起作用,然后在action上起作用,如果我们提到/..../而没有提及任何动作,那么当条件为TRUE时,默认情况下将打印行。如果您要将其放入2个不同的语句中,请尝试:

awk '/foo/;/bar/'  Input_file

上面的意思是:

  1. 由于它们与;分开,将被视为2个不同的条件。
  2. 当任何行的/foo/为true时,将不提及任何操作,因此将打印该行。
  3. /bar/对于任何行都为true时,与此相同,条件也为true,并且未提及任何操作,因此将发生行的打印。

但是要注意的是,如果任何行中都包含两个字符串,那么该行将被打印2次,我相信您可能不希望这样做,因此可以执行以下操作:

或在单一条件下本身尝试以下操作:

awk '/foo|bar/'  Input_file

或者如果您需要检查字符串是否在同一行中,然后尝试点赞:

awk '/foo/ && /bar/'  Input_file
另一答案

要匹配文件中的foobar-只需组合模式:

awk '/foo/ && /bar/ ....'
另一答案
awk '/foo|bar/c+=1 ENDif(c>1) print "both found"' file

输出:

都发现了

以上是关于一行中的多个awk模式匹配的主要内容,如果未能解决你的问题,请参考以下文章

awk-sed

sed / awk - 使用模式匹配后插入空格

使用 sed 或 awk 按照匹配模式打印一行

文本三剑客之awk

linux_awk

linux_awk