Извлечь строку из строки, используя RegEx в Терминале [duplicate]

На этот вопрос уже есть ответ:

У меня есть строка как первый URL, второй URL, третий URL и хотел бы извлечь только url после слова second в OS X Terminal (только первое вхождение). Как я могу это сделать?

В моем любимом редакторе я использовал регулярное выражение / second (url) / и использовал $ 1 для его извлечения, я просто не знаю, как это сделать в Терминале.

Имейте в виду, что url является фактическим URL, я буду использовать одно из следующих выражений, чтобы сопоставить его: Regex для соответствия URL

40
задан Community 23 May 2017 в 12:26
поделиться

2 ответа

echo 'first url, second url, third url' | sed 's/.*second//'

Edit: I misunderstood. Лучше:

echo 'first url, second url, third url' | sed 's/.*second \([^ ]*\).*/\1/'

или:

echo 'first url, second url, third url' | perl -nle 'm/second ([^ ]*)/; print $1'
56
ответ дан 27 November 2019 в 01:32
поделиться

В другом ответе при условии, что вы по-прежнему остаетесь со всем, что находится после желаемого URL. Поэтому я предлагаю вам следующее решение.

echo 'first url, second url, third url' | sed 's/.*second \(url\)*.*/\1/'

В sed вы группируете выражение, избегая скобок вокруг него (стандарт POSIX).

7
ответ дан 27 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

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