[英]Match exact word with awk on Mac OS X
尝试在Mac OS X上使用awk。一个示例:
$ echo "abc stock def" | awk /stock/
abc stock def
$ echo "abc stockholder def" | awk /stock/
abc stockholder def
当我尝试将单词与awk完全匹配时遇到麻烦。 例如,在上述示例中,我只想匹配stock
而不是stockholder
。 我尝试使用\\<
, \\>
, \\b
, \\y
。 但是,所有这些都没有给我预期的结果。
谢谢
如果始终处于第二位置,则可以使用:
awk '$2 == "stock"'
如果可以在任何位置,请使用:
awk '{for (i=1;i<=NF;i++) if ($i == "stock") {print; next}}'
参见示例:
$ echo "abc stock stock def" | awk '{for (i=1;i<=NF;i++) if ($i == "stock") {print; next}}'
abc stock stock def
$ echo "abc stockd def" | awk '{for (i=1;i<=NF;i++) if ($i == "stock") {print; next}}'
$
您可以像这样使用正则表达式:
$> echo "abc stock def" | awk '/(^| )stock( |$)/'
abc stock def
$> echo "abc restock def" | awk '/(^| )stock( |$)/'
$>
更新:要匹配除空间或起始/结束锚以外的其他边界,请使用此正则表达式:
$> echo "abc-stock-def" | awk '/[^[:alnum:]]stock[^[:alnum:]]/'
abc-stock-def
$> echo "abc-stocks-def" | awk '/[^[:alnum:]]stock[^[:alnum:]]/'
$>
我还通过Mac上的homebrew
安装了gnu-awk
,并可以使用该工具执行以下操作:
echo "abc stock def" | gawk '/\<stock\>/'
abc stock def
$> echo "abc restock def" | gawk '/\<stock\>/'
$>
单词成分字符的典型定义(例如\\w
为GNU awk)是任何字母数字或下划线,因此:
$ cat file
abc stock def
abc stock. def
abc stockholder def
abc stock
stock def
$ awk '/(^|[^[:alnum:]_])stock([^[:alnum:]_]|$)/' file
abc stock def
abc stock. def
abc stock
stock def
如果不是,请将[:alnum:]_
更改为您的定义。
我倾向于使用以下方法(也适用于不支持正则表达式的语言):
echo " abc stock def " | grep ' stock '
echo " stock abc def " | grep ' stock '
echo " abc def stock " | grep ' stock '
注意输入和模式的开头和结尾处的空格。
在这里,解析器(在此示例中为grep
)不需要正则表达式支持。 甚至C
的标准函数strstr也可以匹配此...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.