При выполнении следующего
echo "abc>asf<tfg"|sed 's/.*>\(.*\)</\1/'
Вывод:
asftfg
blockquote>Я не понимаю, почему
tfg
получает печататься? Мой ожидаемый результат - asf . Тем не менее, он прекрасно работает в следующем.expr `echo "abc>asf<tfg"` : '.*>\(.*\)<'
Который заставляет меня:
asf
blockquote>И помочь мне извлечь строку между
>
и<
при получении ввода из трубы.
Команда s
в sed
является сопоставлением и заменой. В вашем случае .*>\(.*\)<
- это шаблон для сопоставления, а \1
- шаблон для его замены.
Когда вы пытаетесь найти совпадение для .*>\(.*\)<
в начале abc>asf<tfg
, получается abc>asf<
. Эта часть строки затем заменяется на asf
. tfg
не было сопоставлено, поэтому ничего не происходит с ним.
Использование .*>\(.*\)<.*
в качестве шаблона соответствия должно дать вам желаемые результаты.