Как сохранить совпадающий шаблон в переменную с помощью команды «sed»?

Я пытаюсь найти шаблон, используя команду 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}) в переменной.

1
задан 7 November 2014 в 23:11

1 ответ

Вы должны выполнить это со второй командой 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 <
3
ответ дан 24 May 2018 в 02:34

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

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