понимание Sed / RegExp расширенного заявления

В настоящее время я использую этот вкладыш, чтобы получить последнюю версию docker-compose .

curl --silent "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | sed -E 's/.*"([^"]+)".*/\1/'

Теперь меня очень интересует указанное заявление sed. Кто-нибудь может помочь мне понять это лучше?

sed -E 's/.*"([^"]+)".*/\1/'

Вывод команды без оператора sed: "tag_name": "1.22.0",

Вывод команды с оператором sed: 1.22.0

sed -E 's/.*"([^"]+)".*/\1/

  • -E : sed будет использовать Extended Regex
  • ‘s’: подставить значение.
  • / : разделитель шаблона и замены, которые будут использоваться.
  • .*"([^"]+)".* : лучший способ объяснить регулярные выражения – это граф:
    объяснение регулярных выражений
    По сути, он соответствует каждой строке, в которой есть два блока кавычек, и помещает вторую (без кавычек) внутри первой группы.
  • / : разделитель между вашим регулярным выражением и вашей заменой
  • \1 : в этом случае замените исходную строку на номер группы 1: 1.22.0 .
  • / : последний разделитель без опции после него, поэтому он заменит только один раз строку.

Надеюсь, это достаточно хорошо объяснить.

Я не знаю, что вы знаете о седе. в седе вы можете найти:

sed – streamовый редактор для фильтрации и преобразования текста

а также:

-E, -r, –regexp-extended использовать расширенные регулярные выражения в скрипте (для переносимости используйте POSIX -E).

В sed вы можете определить, позвольте мне сказать, шаблон слов между паразитами и вы можете поймать их с помощью \ No. в вашем вопросе, позвольте мне написать, как показано ниже:

 echo '"tag_name": "1.22.0"' | sed -E 's/"([az]+\_[az]+)": "([0-9\.]+)"/\2/' 
  • -E использовать расширенные регулярные выражения
  • 's/Part1/Part2/ основная структура
  • " шаблон регулярного выражения начинается с
  • ([az]+\_[az]+) первое слово Pattern содержит две части символов, соединенные с _
  • ": " после этого эти символы последовательности произошли бы
  • ([0-9\.]+) Второе слово Pattern содержит столько цифр, сколько .
  • " Паттенр конец с этим.
  • \ 2 теперь вы называете второе слово Pattern