Я надеялся на способ заставить sed заменить всю строку заменой (а не просто соответствием), чтобы я мог сделать что-то вроде этого:
sed -e "/$some_complex_regex_with_a_backref/\1/"
и пусть он напечатает только обратную ссылку.
Из этого вопроса, кажется, что способ сделать это - возиться с регулярным выражением, чтобы соответствовать всей строке, или использовать какой-то другой инструмент (например, Perl). Простое изменение regex
на .*regex.*
Не всегда работает (как упоминалось в этом вопросе). Например:
$ echo $regex
\([:alpha:]*\)day
$ echo $phrase
it is Saturday tomorrow
$ echo $phrase | sed "s/$regex/\1/"
it is Satur tomorrow
$ echo $phrase | sed "s/.*$regex.*/\1/"
$ # what I'd like to have happen
$ echo $phrase | [[[some command or string of commands]]]
Satur
Я ищу самый краткий способ сделать это, предполагая следующее:
- Регулярное выражение находится в переменной, поэтому не может быть изменено в каждом конкретном случае.
- Я хотел бы сделать это без использования Perl или других более сложных языков.