Regex 如何仅筛选其所有字段满足正则表达式条件的行

Regex 如何仅筛选其所有字段满足正则表达式条件的行,regex,awk,Regex,Awk,我试图在awk中使用一个条件,过滤所有字段都满足正则表达式条件的行,而不是逐个遍历字段。 例如,我想要只包含(是或确定)的行 输入示例: yes yes yes no no ok nok no yes yes whatever yes yes ok ok yes 示例输出: yes yes ok ok yes 取决于您的分隔符,假设它是空格或制表符,那么您可以执行以下操作: awk '$0~/^((yes|ok)\s+)*(yes|ok)$/{print}' file ps:\s是GNU

我试图在awk中使用一个条件,过滤所有字段都满足正则表达式条件的行,而不是逐个遍历字段。 例如,我想要只包含(是或确定)的行

输入示例:

yes yes yes no no ok nok
no yes yes whatever
yes yes ok
ok yes
示例输出:

yes yes ok
ok yes

取决于您的分隔符,假设它是空格或制表符,那么您可以执行以下操作:

awk '$0~/^((yes|ok)\s+)*(yes|ok)$/{print}' file
ps:
\s
是GNU awk的功能,对于其他版本,您可能需要将其更改为
[\t]

$0~
{print}
部分实际上是隐式的,我们可以删除它们,只需使用以下方法:

awk '/^((yes|ok)\s+)*(yes|ok)$/' file

取决于您的分隔符,假设它是空格或制表符,那么您可以执行以下操作:

awk '$0~/^((yes|ok)\s+)*(yes|ok)$/{print}' file
ps:
\s
是GNU awk的功能,对于其他版本,您可能需要将其更改为
[\t]

$0~
{print}
部分实际上是隐式的,我们可以删除它们,只需使用以下方法:

awk '/^((yes|ok)\s+)*(yes|ok)$/' file

您不需要
$0~
{print}
,只需将它们删除即可。您不需要
$0~
{print}
,只需将它们删除即可