соответствие шаблону sed между двумя строками; 2-ой образец терпит неудачу - PullRequest
0 голосов
/ 29 июня 2018

Я пытался извлечь шаблон между двумя строками. В приведенном ниже примере я хочу, чтобы мой вывод был только «mydata.data»:

> echo "this/cluster/data/mydata.data?x-username=me" | sed 's/.*data\/\(.*\)?x/\1/'
> mydata.data-username=me

Что мне нужно сделать, чтобы строка после 2-го совпадения ("-username = me") не выводилась?

спасибо!

Ответы [ 2 ]

0 голосов
/ 29 июня 2018

Ваш паттерн не соответствует остальной части линии, поэтому он проходит. Измените? X на? X. * И \ 1 заменит оставшуюся часть строки.

Правая половина заменяет все, что соответствует левой половине, поэтому ваш шаблон должен соответствовать всему, что вы хотите заменить.

0 голосов
/ 29 июня 2018

Вы можете добавить .* в конце шаблона, чтобы использовать все оставшиеся строки. Кроме того, рекомендуется использовать разделители, отличные от /, если в шаблоне указано /.

Используйте

echo "this/cluster/data/mydata.data?x-username=me" | sed 's,.*data/\(.*\)?x.*,\1,'

См. онлайн демо

Шаблон будет соответствовать

  • .* - любые 0+ символов
  • data/ - буквальная подстановка
  • \(.*\) - захватить в группу 1 (\1) любые 0+ символов
  • ?x - совпадение ?x буквенная подстрока
  • .* - любые 0+ символов для остальной части ввода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...