使用 grep -E (egrep) 搜索回文

问题描述 投票:0回答:1

阅读 Brian W. Kernighan 和 Rob Pike 撰写的《Unix 编程环境》。

正在进行一项练习,应使用

grep -E
查找单词列表中的所有回文。

我能够在网上找到并理解的最简洁的解决方案是

'^(.?)(.?)(.?)(.?)(.?).?\5\4\3\2\1$'
,应该找到最多 11 个字符的所有回文。

由于某种原因,我的终端中的 grep 给出了我无法解释的结果:

me@machine:~/test$ cat sample
a
ab
abba
abcdef
abcba
zufolo
me@machine:~/test$ grep -E '^(.?)(.?)(.?)(.?)(.?).?\5\4\3\2\1$' sample
a
abba
abcba
zufolo
me@machine:~/test$ grep -E '^(.?)(.?)(.?)(.?).?\4\3\2\1$' sample
a
abba
abcba

为什么它会在结果中添加

zufolo
(而不像对实际回文那样对任何匹配项进行着色)?当我将正则表达式减少到最多 9 个字符时,为什么
zufolo
消失了? output

跟我的设置(最标准的)有关系吗?

me@machine:~/test$ ls -l /proc/$$/exe
lrwxrwxrwx 1 me me 0 jan 15 18:37 /proc/3528/exe -> /usr/bin/bash
me@machine:~/test$ cat /proc/version
Linux version 6.5.0-14-generic (buildd@lcy02-amd64-110) (x86_64-linux-gnu-gcc-12 (Ubuntu 12.3.0-1ubuntu1~22.04) 12.3.0, GNU ld (GNU Binutils for Ubuntu) 2.38) #14~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Mon Nov 20 18:15:30 UTC 2

附注

zufolo
来自
wamerican-insane
,我正在实际测试它。还有很多其他的,比如
xenian
tartar

我尝试在线研究,修改正则表达式,但无法理解这个问题。

regex bash unix grep
1个回答
0
投票

我想你问题的实际答案是,你的正则表达式没有任何问题;您似乎发现了

grep
中的一个错误。

© www.soinside.com 2019 - 2024. All rights reserved.