我试图让awk搜索完全匹配,除了前导和尾随特殊字符和空格。
EG
寻找'你好':
Matches:
$%#@!@@[Hello ^%.!
hello world
但WONT匹配:
helloworld
我有部分匹配工作如下:
(tolower($0) ~ /hello/)
但无法弄清楚如何做特殊字符。
“特殊”字符是指非字母/数字字符:
!@#$%^&*()-[]:"><'.,/?\|~`
如果你相信awk
的词边界
$ awk 'tolower($0) ~ /\yhello\y/' file
$%#@!@@[Hello ^%.!
hello world
但会过滤掉“helloworld”
我认为\y
只有gawk
支持,否则你可以使用\<
和\>
左右边界......
$ cat ip.txt
helloworld
hello_world
$%#@!@@[Hello ^%.!
hello world
$ grep -iE '(^|[^[:alnum:]])hello([^[:alnum:]]|$)' ip.txt
hello_world
$%#@!@@[Hello ^%.!
hello world
-iE
用于不区分大小写的匹配并使用ERE(^|[^[:alnum:]])
行或非字母/数字字符的开头hello
字符串匹配([^[:alnum:]]|$)
后跟非字母/数字字符或行尾如果你包括_
以及一个有效的角色,那么
$ grep -iw 'hello' ip.txt
$%#@!@@[Hello ^%.!
hello world