一行中的多个awk模式匹配

一行中的多个awk模式匹配,awk,Awk,假设我想在一个文件中匹配foo和bar。以下工作: /foo/{commands}/bar/{commands} 注意:/foo/{commands}和/bar/{commands}之间没有分隔符 以下内容也很好: /foo/{commands1}{commands2},其中{commands2}对每一行执行,我省略了模式 但是如果我想省去命令呢?awk的语法规则是什么?以下操作不起作用: /foo//bar/ 当然,我可以写为/foo/{print}/bar/{print},但我想知道分隔段的

假设我想在一个文件中匹配foo和bar。以下工作:

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

以下内容也很好:

/foo/{commands1}{commands2},其中{commands2}对每一行执行,我省略了模式

但是如果我想省去命令呢?awk的语法规则是什么?以下操作不起作用:

/foo//bar/

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

awk使用regexp方法,然后在这里执行操作如果我们提到/…/而没有提到任何操作,那么当条件为真时,默认情况下会打印行。如果您想将其放入两个不同的语句中,请尝试以下操作:

awk '/foo/;/bar/'  Input_file
上面的意思是:

因为他们是被隔离的;这些将被视为两种不同的情况。 当任何一行的/foo/为true时,则不会提及任何操作,因此将打印该行。 当任何一行的/bar/为真时,同样的情况也适用于该行,条件为真,并且没有提及任何操作,因此将发生行的打印。 但需要注意的是,如果任何一行中同时包含两个字符串,那么该行将被打印2次,我相信您可能不需要它,所以您可以执行以下操作:

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

awk '/foo|bar/'  Input_file
或者,如果您需要检查同一行中是否存在字符串,请尝试以下操作:

awk '/foo/ && /bar/'  Input_file
awk在regexp-then-action方法上工作,如果我们提到/…/而没有提到任何操作,那么当条件为TRUE时,默认情况下会打印行。如果您想将其放入两个不同的语句中,请尝试以下操作:

awk '/foo/;/bar/'  Input_file
上面的意思是:

因为他们是被隔离的;这些将被视为两种不同的情况。 当任何一行的/foo/为true时,则不会提及任何操作,因此将打印该行。 当任何一行的/bar/为真时,同样的情况也适用于该行,条件为真,并且没有提及任何操作,因此将发生行的打印。 但需要注意的是,如果任何一行中同时包含两个字符串,那么该行将被打印2次,我相信您可能不需要它,所以您可以执行以下操作:

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

awk '/foo|bar/'  Input_file
或者,如果您需要检查同一行中是否存在字符串,请尝试以下操作:

awk '/foo/ && /bar/'  Input_file
要在文件中匹配foo和bar-只需组合模式:

awk '/foo/ && /bar/ ....'
要在文件中匹配foo和bar-只需组合模式:

awk '/foo/ && /bar/ ....'

谢谢一个简单的问题:为什么我们不需要“;”在/foo/{print}/bar/?这做了同样的事情,只是我显式地包含了{print}。@seclude,因为/foo/是一个条件如果这是真的,那么你正在打印{print}这一行,所以它也完成了我在回答中提到的循环,然后你再次提到1个条件/regexp,它不需要用a;分隔;。请告诉我,如果还有任何查询,请告诉我?您的意思是在像/foo//bar/这样的东西中,虽然默认操作是{print}for/foo/,但循环尚未完成,这就是为什么您需要;。是吗?@seclude,不是,但这不是正确的方法,在这种情况下,条件和操作都是条件,所以如果您想在一行上同时使用这两个条件,那么可以使用/foo/| |/bar/for或条件来检查字符串,或者使用/foo/&&/bar/和条件来检查单行上的两个字符串。我希望它现在能帮助你。啊哈!知道了。谢谢,谢谢。一个简单的问题:为什么我们不需要“;”在/foo/{print}/bar/?这做了同样的事情,只是我显式地包含了{print}。@seclude,因为/foo/是一个条件如果这是真的,那么你正在打印{print}这一行,所以它也完成了我在回答中提到的循环,然后你再次提到1个条件/regexp,它不需要用a;分隔;。请告诉我,如果还有任何查询,请告诉我?您的意思是在像/foo//bar/这样的东西中,虽然默认操作是{print}for/foo/,但循环尚未完成,这就是为什么您需要;。是吗?@seclude,不是,但这不是正确的方法,在这种情况下,条件和操作都是条件,所以如果您想在一行上同时使用这两个条件,那么可以使用/foo/| |/bar/for或条件来检查字符串,或者使用/foo/&&/bar/和条件来检查单行上的两个字符串。我希望它现在能帮助你。啊哈!知道了。谢谢