Regex не удалось в седе - PullRequest
       8

Regex не удалось в седе

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

Входные данные:

get \tag-start Snooby ~p snoopy \tag-end please

Выходные данные: Snooby (после тега и перед ~ p; не жадный захват, потому что некоторые предложения содержат несколько тегов)

echo 'get \tag-start Snooby ~p snoopy \tag-end please' | sed 's/.*tag-start \(.*?\) ~p.*/\1/'

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

Ответы [ 2 ]

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

Нежадность не поддерживается большинством sed реализаций (я смутно помню одну реализацию, разрешающую PCRE)

Как уже упоминалось в комментариях Wiktor Stribiżew , любая из них будет работать дляв данном случае

$ sed 's/.*tag-start \(.*\) ~p.*/\1/' ip.txt
Snooby
$ sed 's/.*tag-start \([^~]*\) ~p.*/\1/' ip.txt
Snooby


Поскольку тег linux помечен, у вас может быть GNU grep с PCRE, и в этом случае вы можете использовать не жадное регулярное выражение при необходимости

$ grep -oP 'tag-start \K.*?(?= ~p)' ip.txt
Snooby
0 голосов
/ 05 июня 2018

Попробуйте это sed:

echo "get \tag-start Snooby ~p snoopy \tag-end please" |sed 's/.*tag-start \(.*\) ~p.*/\1/'

Вывод:

Snooby

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...