Я пытаюсь найти шаблон, используя команду sed в file.txt между первым char1 и char2, а затем замените это на строку. как показано ниже с примером режима echo:
echo "This X is test Y. But X is not test Y." | sed 's/X[^Y]*Y/REPLACE/'
Также мне нужно сохранить совпадающий шаблон (например, is test {& lt; - space around important}) в переменной.
Вы должны выполнить это со второй командой sed:
var=$(echo "This X is test Y. But X is not test Y." | \
tee >(sed 's/X[^Y]*Y/REPLACE/' >/dev/stderr) | \
sed -r 's/[^X]*X([^Y]*)Y.*/\1/')
Exlanation:
Вы должны использовать tee для разделения потока. То, что оба stdout и stderr содержат строку. tee нужен файл в качестве аргумента. Мы даем tee канал, в котором sed прослушивает и заменяет строку. sed печатает строку в stderr: вывод, который вы видите в терминале. Вторая команда sed прослушивает stdout и извлекает нужную строку, которая теперь сохраняется в переменной $var (contect of stdout).Используйте это, чтобы проверить:
$ echo ">$var<"
> is test <