На этот вопрос уже есть ответ здесь:
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
.
Как он выводит и первую строку?
Ваша группа \([[:alpha:]]\{1,\}\)
получения получает последовательность одного или нескольких буквенных символов, и Вы привязали ее к запуску из строки с ^
, Таким образом, она будет соответствовать abc
в первой строке, и aaa
во второй строке.
целое выражение '^\([[:alpha:]]\{1,\}\) .* \1$
поэтому соответствует любой строке по крайней мере двух разделенных пробелом последовательностей, которая заканчивается той же алфавитной последовательностью, с которой это запустилось:
abc <anything - or nothing> abc
aaa <anything - or nothing> aaa
и так далее.