完全匹配,除了前导和尾随特殊字符(包括空格)

问题描述 投票:2回答:2

我试图让awk搜索完全匹配,除了前导和尾随特殊字符和空格。

EG

寻找'你好':

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

但WONT匹配:

helloworld

我有部分匹配工作如下:

(tolower($0) ~ /hello/)

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

“特殊”字符是指非字母/数字字符:

!@#$%^&*()-[]:"><'.,/?\|~`

shell awk
2个回答
1
投票

如果你相信awk的词边界

$ awk 'tolower($0) ~ /\yhello\y/' file

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

但会过滤掉“helloworld”

我认为\y只有gawk支持,否则你可以使用\<\>左右边界......


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
© www.soinside.com 2019 - 2024. All rights reserved.