我正在尝试使用awk搜索精确匹配,除了前导和尾随特殊字符和空格。
e.g。
搜索“你好':
”Matches:
$%#@!@@[Hello ^%.!
hello world
但WONT匹配:
helloworld
我的部分匹配工作如下:
(tolower($0) ~ /hello/)
但无法弄清楚如何做特殊字符。
特别'字符,我的意思是非字母/数字字符:
!@#$%^&安培; *() - []:?"><' / \ |〜`
答案 0 :(得分:2)
$ 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
答案 1 :(得分:1)
如果您信任awk
的字边界
$ awk 'tolower($0) ~ /\yhello\y/' file
$%#@!@@[Hello ^%.!
hello world
但会过滤掉“helloworld”
我认为只有\y
支持gawk
,否则您可以将\<
和\>
用于左右边界......