У меня есть переменная, содержащая следующее значение: "|| InstanceId | i-0f85cb9ccb11fd035 ||"

Переменная генерируется динамически, и мне нужно извлечь значение InstanceId из этой переменной.

Идентификатор экземпляра всегда начинается с «I-» или находится между одинарным и двойным каналом.

Попытка использовать grep в скрипте MacOS для этого. Любая помощь приветствуется.

Спасибо!

1 ответ1

2

Чтобы заменить строку, вам нужно использовать sed . Вот как это сделать.

$ var="|| InstanceId | i-0f85cb9ccb11fd035 ||"
$ printf '%s\n' "$var" | sed -r 's/\|\|[^\|]+\| [iI]-([^ ]+) \|\|/\1/g'

's/\|\|[^\|]+\| [iI]-([^ ]+) \|\|/\1/g' - это шаблон, который вам нужно понять.

s/something/replacement/g означает заменить любые вхождения "что-то" на "замена".

\| это просто экранированный символ

Таким образом, мы ищем два канала, за которыми следует [^\|]+ , т. Е. Последовательность из одного или нескольких непутевых символов. Затем следует еще одна труба и пробел, \| , Затем мы сопоставляем i- или I- , читаем последовательность непробельных символов, помещаем их в группу, используя круглые скобки, ([^ ]+) затем следуем пробел и два канала \|\| ,

Затем мы заменим все это первой группой, то есть \1 .

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