完全匹配,包括空格

时间:2018-03-06 16:34:20

标签: shell awk

我正在尝试使用awk搜索精确匹配,除了前导和尾随特殊字符和空格。

e.g。

搜索“你好':

Matches:
$%#@!@@[Hello ^%.!
hello world

但WONT匹配:

helloworld

我的部分匹配工作如下:

(tolower($0) ~ /hello/)

但无法弄清楚如何做特殊字符。

特别'字符,我的意思是非字母/数字字符:

@#$%^&安培; *() - []:?"><' / \ |〜`

2 个答案:

答案 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,否则您可以将\<\>用于左右边界......