удалить несколько шаблонов линий -

Я разбил путь на (3 )части:

  1. Нет -Переменная база:Часть пути, которая является предсказуемой на 100% и не подлежит изменению в будущем

https://github.com/digitalocean/doctl/releases/download/

  1. Имя переменной DIRECTORY:Имя каталога — это номер версии. Так что, хотя это переменная, она все же предсказуема, потому что использует семантическое управление версиями (https://semver.org/):
  2. .

v$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz'|grep -Eo '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')/

Операция заключается в поиске самого последнего файла и извлечении из него номера версии. Поскольку «v » в имени каталога не является частью имени файла, его нельзя захватить с помощьюgrep.Итак, я просто жестко закодировал -перед переменной self -, заполняющей

.

  1. Имя ФАЙЛА переменной:Операция следующего выражения извлекает только последнюю версию (" m 1 " части )имени файла:

$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz')

Вся эта уродливая штука выглядит следующим образом (с " | tar -xzv " на конце):

curl -sL https://github.com/digitalocean/doctl/releases/download/v$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz'|grep -Eo '[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}')/$(curl -s https://github.com/digitalocean/doctl/releases/ | grep -om 1 'doctl-.*-linux-amd64.tar.gz') | tar -xzv

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

Опять же, возможно, это не самое элегантное решение, но оно эффективно решает проблему. Если у вас есть лучший подход, пожалуйста, поделитесь! ХТХ-

0
13.04.2021, 00:08
1 ответ

Вы можете делать что-то с буфером хранения в sed, но проще обойти это с помощью -zв GNU sed, чтобы указать использовать байт NUL в качестве разделителя вместо новой строки:

$ sed -z 's/abc\ndef//' test.txt

hij
klmn

или просто переключиться на Perl(-0будет использовать NUL в качестве разделителя строк, -0777говорит, что он читает весь файл за один раз):

$ perl -0777 -pe 's/abc\ndef//' test.txt

hij
klmn
3
28.04.2021, 22:53

Теги

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