Необходимо использовать двойной код и передать переменную в команде sed - PullRequest
0 голосов
/ 27 мая 2019

Поиск шаблона и отображение с помощью SED, которые имеют двойной код (") и переменную необходимо передать.

Фактический журнал:

<confirmation ID="123456-109" status>

Хочу напечатать 109

Это с действительной командой sed, которая сработала:

sed -n 's%.*confirmation="123456-\(.*\)" status.*%\%p' /tmp/log

выход: 109

Но когда я попытался использовать это в скрипте, где передача 123456 в качестве переменной не работает.

req_data=`sed -n 's%.*confirmation="$variable-\(.*\)" status.*%\%p' /tmp/log`

Когда я запускаю в Script, это не дает мне никакого вывода.

Я ожидаю выхода: 109

1 Ответ

0 голосов
/ 27 мая 2019

Выполните command и назначьте его вывод переменной res как res="$(command)".

. Вам нужно использовать sed -E, чтобы скобки работали для группировки (или в обычном режиме, вы должныизбежать каждой круглой скобки).(обратите внимание, что опция -E для sed не является частью стандарта posix)

Кроме того, как указано в комментариях, переменные не расширяются / интерполируются внутри одинарных кавычек.Если вы находитесь в одном блоке в кавычках, завершите его перед переменной и начните другой блок после переменной.

Следующее должно решить все вышеперечисленное и решить вашу проблему.

req_data="$(sed -En 's%.*confirmation ID=\\"'$variable'-(.+)\\" status.*%\1%p' /tmp/log)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...