Используйте sed, чтобы взять строку

Я использую curl, чтобы получить html с сайта, тогда мне просто нужна конкретная строка, которая находится между "standard.xml? Revision=" и "&". Я использую sed, чтобы сделать это, но я не могу понять правильное выражение и нуждался в некоторой помощи.

curl website.com | sed -r 's|.*standards\.xml\?revision=([0-9]+).*|\1|'

Вывод, который я получаю, является полным HTML - любая помощь будет оценена.

3 ответа

Решение

Ты почти там. Попробуйте использовать -n вариант с sed не печатать несопоставимые данные и добавлять p модификатор к s||| напечатать замену строки

curl website.com | sed -n -r 's|.*standards\.xml\?revision=([0-9]+).*|\1|p'

Ты можешь использовать grep -oP (Опция PCRE):

grep -oP 'standards\.xml\?revision=\K[0-9]+'

\K сбрасывает сопоставленный текст, следовательно, только позже [0-9]+ возвращается

curl website.com | sed -n '/xml/ {s|.*standards\.xml\?revision=([^&]+).*|\1|p;q;}'

Из предыдущего sed [0-9]+ только если число встречается, может быть, [^&]+ более уместно. Очень хорошо использовать 'и | чтобы избежать проблем с \, поэтому я выбираю это:-)

Другие вопросы по тегам