REGEX ведет себя по-разному!

При выполнении следующего

echo "abc>asf<tfg"|sed 's/.*>\(.*\)</\1/'

Вывод:

asftfg

Я не понимаю, почему tfg получает печататься? Мой ожидаемый результат - asf . Тем не менее, он прекрасно работает в следующем.

expr `echo "abc>asf<tfg"`  : '.*>\(.*\)<'

Который заставляет меня:

asf

И помочь мне извлечь строку между > и < при получении ввода из трубы.

3
задан 12 July 2013 в 19:49

1 ответ

Команда s в sed является сопоставлением и заменой. В вашем случае .*>\(.*\)< - это шаблон для сопоставления, а \1 - шаблон для его замены.

Когда вы пытаетесь найти совпадение для .*>\(.*\)< в начале abc>asf<tfg, получается abc>asf<. Эта часть строки затем заменяется на asf. tfg не было сопоставлено, поэтому ничего не происходит с ним.

Использование .*>\(.*\)<.* в качестве шаблона соответствия должно дать вам желаемые результаты.

0
ответ дан 12 July 2013 в 19:49

Другие вопросы по тегам:

Похожие вопросы: