Как извлечь часть вывода команды curl и присвоить ее переменной оболочки — часть 2?

grep явно определено для игнорирования новых строк, поэтому вы не можете использовать это. sedвнутренне знает, заканчивается ли текущая строка (фрагмент )новой строкой или нет, но я не понимаю, как его можно заставить раскрыть эту информацию. awkразделяет записи символом новой строки (RS), но на самом деле не имеет значения, был ли он вообще, действие printпо умолчанию — в любом случае печатать новую строку(ORS)в конце.

Таким образом, обычные инструменты здесь не кажутся слишком полезными.

Тем не менее, sedзнает, когда он работает с последней строкой, поэтому, если вы не возражаете против потери последней неповрежденной строки в случаях, когда частичная строка не видна, вы можете просто sedудалить то, что он думает, что это последний. Например.

sed -n -e '$d' -e '/pattern/p'  < somefile                   # or
< somefile sed '$d' | grep...

Если это не вариант, всегда есть Perl. Это должно печатать только те строки, которые соответствуют /pattern/, и иметь новую строку в конце:

perl -ne 'print if /pattern/ && /\n$/'

-1
15.05.2020, 17:49
1 ответ

Это должно работать:

VAR2="$(curl<..> | sed -E -n 's/.*fileId":"([^"]+).+/\1/p')"

Проблема с вашей попыткой заключается в том, что вы использовали \2в команде sed, но у вас есть только одна группа регулярных выражений. Я думаю, вам следует взглянуть на информационную страницуsed, чтобы понять, как работает sed.

0
28.04.2021, 23:14

Теги

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