尝试在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
。但是他们都没有给我预期的结果。
由于
答案 0 :(得分:3)
如果始终位于第2位,您可以使用:
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}}'
$
答案 1 :(得分:3)
你可以使用这样的正则表达式:
$> 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上通过gnu-awk
安装了homebrew
并使用我可以执行的操作:
echo "abc stock def" | gawk '/\<stock\>/'
abc stock def
$> echo "abc restock def" | gawk '/\<stock\>/'
$>
答案 2 :(得分:1)
单词 - 成分 - 字符的典型定义(例如,GNU awk的\w
)是任何字母数字或下划线,因此:
$ 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:]_
更改为您的定义,如果不是那样。
答案 3 :(得分:0)
我倾向于使用以下方法(也适用于没有正则表达式支持的语言):
echo " abc stock def " | grep ' stock '
echo " stock abc def " | grep ' stock '
echo " abc def stock " | grep ' stock '
注意开头的空格&amp;输入结束&amp;图案。
这里,解析器(本例中为grep
)不需要正则表达式支持。即使C
的标准函数strstr也可以匹配此...