我想用来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或者它是这条线的终点。