一行中有多个awk模式匹配

sec*_*ded 1 awk

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

/foo/{commands}/bar/{commands} 注意:/foo/{commands}和之间没有分隔符/bar/{commands}

以下内容也不错:

/foo/{commands1}{commands2}{commands2}每行执行的地方,我省略了模式。

但是,如果我想忽略这些命令怎么办?awk的语法规则是什么?以下内容不起作用:

/foo//bar/

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

Rav*_*h13 5

awk如果我们提及而不是提及任何动作,regexp则适用action于this的方法,/..../因此当condition为TRUE时,默认情况下将打印行。如果您要将其放入2个不同的语句中,请尝试如下操作:

awk '/foo/;/bar/'  Input_file
Run Code Online (Sandbox Code Playgroud)

上面的意思是:

  1. 由于它们与它们隔离,;因此将被视为2个不同的条件。
  2. 如果/foo/任何一行为true,则不会提及任何操作,因此将打印该行。
  3. /bar/任何一行都为true时,条件也为true,并且没有提及任何动作,因此将打印行。

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

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

awk '/foo|bar/'  Input_file
Run Code Online (Sandbox Code Playgroud)

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

awk '/foo/ && /bar/'  Input_file
Run Code Online (Sandbox Code Playgroud)

  • @secluded,不,但这不是正确的方法,在这种情况下,“condition”然后“action”都是条件,因此如果您想在一行上使用这两个条件,请使用“/foo/|” |/bar/` 或条件来检查字符串或 `/foo/&&/bar/` AND 条件来检查单行上的两个字符串。我希望现在对你有帮助。 (2认同)