Я встречал различные примеры печати следующей строки после матча, которые используют awk и sed. Я использую его в своем коде, и он отлично работает. Теперь я хочу использовать переменную вместо жестко заданного значения для сопоставления с образцом. Строка шаблона поиска включает косую черту "/". Как мне использовать переменную, в которой есть «/», и использовать ее для печати следующей строки после совпадения? Следующее не похоже на работу:

 var="/somePath/to/my/home"  
 val=`echo -e "$someStr" | sed -n ':$var:{n;p;}'`

В этом случае val всегда пуст. Я использую ":" в качестве разделителя вместо "/". Я на Mac OS X.

2 ответа2

0

Измените команду sed следующим образом:

sed -n "\:$var: {n;p;}"

Два момента:

  1. Лучшее, на что вы могли рассчитывать с вашей версией, это искать « $var ». Чтобы выполнить поиск « /somePath/to/my/home », необходимо заменить одинарные кавычки (') на двойные кавычки ("), чтобы можно было заменить« $var »на« /somePath/to/my/home ».

  2. В sed регулярное выражение с разделителями может выглядеть так:

/      регулярная_экспрессия      /

или же

\ other_delimiter     regular_expression     other_delimiter(повторяется)

так что вам нужно \ перед :

0

При установке переменной "var", избегайте обратной косой черты:

var="\/somePath\/to\/my\/home"
sed -n "/$var/{n;p;}" file

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .