清楚理解 grep 反向引用

清楚理解 grep 反向引用
grep '^\([[:alpha:]]\{1,\}\) .* \1$' myfile.txt 

捕获

abc whatever whatever abc
aaa whatever whatever aaa

我以为我的grep只会捕获以“aaa”开头的第二行,因为^\([[[:alpha:]]\{1,\}\)只会产生诸如之类的字符串a | aa | aaa | b | bbbb,而不是ab | abc

它怎么也会输出第一行呢?

答案1

您的捕获组\([[:alpha:]]\{1,\}\)捕获一个或多个字母字符的序列,并将其锚定到行首^

所以它将abc在第一行和aaa第二行匹配。

因此,整个表达式'^\([[:alpha:]]\{1,\}\) .* \1$与至少两个空格分隔的序列的任何行匹配,这些序列以与其开头相同的字母序列结尾:

abc <anything - or nothing> abc
aaa <anything - or nothing> aaa

等等。

相关内容