awk 匹配整个单词

awk 匹配整个单词

我想用来awk匹配文本文件中的整个单词。包括由非字母数字字符限定的单词。

例如 -

要搜索的字符串 - ABC

源文件 -

HHHABCCCCH
HHH ABC
HH(ABC)ASDAASD
HH,ABC-ASASDASD

结果 -

HHH ABC
HH(ABC)ASDAASD
HH,ABC-ASASDASD

答案1

如果要将“ABC”作为变量传递而不是对其进行硬编码,请使用匹配运算符:

awk -v word=ABC '$0 ~ "(^|[^[:alpha:]])" word "([^[:alpha:]]|$)"'

使用 gawk(其他 awk 也可以?),您可以使用\<\>来表示单词边界,其中单词是字母、数字和下划线的序列(我相信),因此这对您的示例有用:

awk '/\<ABC\>/'

答案2

用于\y单词边界,例如

awk '/\yABC\y/'

https://www.gnu.org/software/gawk/manual/html_node/GNU-Regexp-Operators.html更多细节。

答案3

搞清楚了——因为打字错误而遇到问题

awk '/[^[:alpha:]]ABC[^[:alpha:]]/'

答案4

尝试这个:

awk '/( |\t|^|[^a-zA-Z0-9]+)ABC( |\t|$|[^a-zA-Z0-9]+)/' filename

这里: ( |\t|^|[^a-zA-Z0-9]+)表示前面只能有空格/制表符/非字母数字字符ABC或者它是该行的开头。

再次,( |\t|$|[^a-zA-Z0-9]+)意味着后面只能有空格/制表符/非字母数字字符ABC或者它是这条线的终点。

相关内容