写这样一个pattern,/^53$|^5353$|^6666$|^68$/
,最前面和最后面的会匹配不到
比如
echo -n 5353 | awk '{if($1 ~ "/^53$|^5353$|^6666$|^68$/") {printf($1)}}'
会匹配到5353,但是下面的这个
echo -n 53 | awk '{if($1 ~ "/^53$|^5353$|^6666$|^68$/") {printf($1)}}'
echo -n 68 | awk '{if($1 ~ "/^53$|^5353$|^6666$|^68$/") {printf($1)}}'
却匹配不到任何东西
echo -n 53 | awk '{if($1 ~ "/^5353$|^53$|^6666$|^68$/") {printf($1)}}'
这样可以匹配到53
我想到一个解决方法是在pattern的前后加上无用的字符,变成这样/x|^53$|^5353$|^6666$|^68$|x/
就可以规避这个问题,但是这看起来很奇怪,是否还有更优雅的姿势?
这样可以正常匹配53
echo -n 53 | awk '{if($1 ~ /^53$|^5353$|^6666$|^68$/) {printf($1)}}'
chatgpt给出了答案
在awk中使用正则表达式时,不需要在正则表达式的前后加上斜杠(/),因为在awk的匹配中,它已经隐含了正则表达式的开始和结尾。
因此,对于你提供的正则表达式,应该将其修改为
^53$|^5353$|^6666$|^68$
,而不是/^53$|^5353$|^6666$|^68$/
。