Я разбил путь на (3 )части:
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}')/
Операция заключается в поиске самого последнего файла и извлечении из него номера версии. Поскольку «v » в имени каталога не является частью имени файла, его нельзя захватить с помощьюgrep.Итак, я просто жестко закодировал -перед переменной self -, заполняющей
.
$(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
Эта загрузка будет успешно выполняться без необходимости вручную редактировать сценарий, в котором имена файлов и каталогов изменятся в будущих выпусках.
Опять же, возможно, это не самое элегантное решение, но оно эффективно решает проблему. Если у вас есть лучший подход, пожалуйста, поделитесь! ХТХ-
Вы можете делать что-то с буфером хранения в 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