awk正则表达式匹配,pattern中有or的情况顺序会影响结果,是什么原因?

新手上路,请多包涵

写这样一个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)}}'
阅读 1.8k
1 个回答
✓ 已被采纳新手上路,请多包涵

chatgpt给出了答案

在awk中使用正则表达式时,不需要在正则表达式的前后加上斜杠(/),因为在awk的匹配中,它已经隐含了正则表达式的开始和结尾。
因此,对于你提供的正则表达式,应该将其修改为^53$|^5353$|^6666$|^68$,而不是 /^53$|^5353$|^6666$|^68$/

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进