ИМХО, это потому, что ваше регулярное выражение не завершено, вам нужно дать .*
в вашем регулярном выражении, например:
echo "aabb" |sed -n -E "s/([a-z]).*/\1/p"
Делая это, мы точно перехватываем один символ и затем сопоставляем остальную часть строки так, следовательно, он печатает нормально.
, почему не работает одиночный [a-z]
: потому что он ищет только один символ в строке, а когда регулярное выражение не совпадает ни с чем, вся строка попадает в \1
временной буфер, следовательно, его печать вся строка.
Давайте рассмотрим пример, в котором строка имеет только 1 символ, тогда регулярное выражение OP будет работать, например ->
echo "a" |sed -n -E "s/([a-z])/\1/p"
ПРИМЕЧАНИЕ: Также вы можете удалить -n
и /p
часть в вашей команде и можете использовать как:
echo "aabb" |sed -E "s/([a-z]).*/\1/"