一行中的多个awk模式匹配
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一行中的多个awk模式匹配相关的知识,希望对你有一定的参考价值。
假设我要匹配文件中的foo
和bar
。以下作品:
/foo/commands/bar/commands
注意:/foo/commands
和/bar/commands
之间没有分隔符。
以下内容也不错:
[/foo/commands1commands2
其中每行执行commands2
,而我省略了该模式。
但是如果我想省略这些命令怎么办? awk的语法规则是什么?以下无效:
/foo//bar/
当然,我可以将其写为/foo/print/bar/print
,但我想知道分隔段的分隔符是什么,为什么有时需要而有时却不需要。
答案
awk
在regexp
的方法上起作用,然后在action
上起作用,如果我们提到/..../
而没有提及任何动作,那么当条件为TRUE时,默认情况下将打印行。如果您要将其放入2个不同的语句中,请尝试:
awk '/foo/;/bar/' Input_file
上面的意思是:
- 由于它们与
;
分开,将被视为2个不同的条件。 - 当任何行的
/foo/
为true时,将不提及任何操作,因此将打印该行。 - 当
/bar/
对于任何行都为true时,与此相同,条件也为true,并且未提及任何操作,因此将发生行的打印。
但是要注意的是,如果任何行中都包含两个字符串,那么该行将被打印2次,我相信您可能不希望这样做,因此可以执行以下操作:
或在单一条件下本身尝试以下操作:
awk '/foo|bar/' Input_file
或者如果您需要检查字符串是否在同一行中,然后尝试点赞:
awk '/foo/ && /bar/' Input_file
另一答案
要匹配文件中的foo
和bar
-只需组合模式:
awk '/foo/ && /bar/ ....'
另一答案
awk '/foo|bar/c+=1 ENDif(c>1) print "both found"' file
输出:
都发现了
以上是关于一行中的多个awk模式匹配的主要内容,如果未能解决你的问题,请参考以下文章