Java regex и sed - это не одно и то же ... - PullRequest
5 голосов
/ 18 мая 2011

Получить эти строки:

00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528

Примените этот опыт в Java: ^(06700|067|00)([0-9]*).

Мое намерение - удалить ведущие "06700, 067 и 00" с начала строки.

В java все круто, у группы 2 всегда есть номер, который я намереваюсь, но в sed это не одно и то же:

$ cat strings|sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'
00543515703528
00582124628575
0034911320020
0034911320020
005217721320739
0902345623
067913187056
00543515703528

Какого черта я скучаю?

Приветствия

е.

Ответы [ 2 ]

5 голосов
/ 18 мая 2011

При использовании расширенных регулярных выражений также необходимо пропустить \ перед ( и ). Это работает для меня:

sed -r 's/^(06700|067|00)([0-9]*)/\2/g' strings 

обратите внимание также, что нет необходимости в отдельном вызове на cat

3 голосов
/ 18 мая 2011

Я считаю, что ваша проблема заключается в следующем:

sed по умолчанию BRE: по умолчанию поведение sed - это поддержка Basic Регулярные выражения (BRE). Использовать все функции, описанные на этой странице установите флаг -r (Linux) или -E (BSD) в использовать расширенные регулярные выражения

Источник

Без этого флага | характер интерпретируется буквально. Попробуйте этот пример:

echo "06700|067|0055555" | sed -e 's/^\(06700|067|00\)\([0-9]*\)/\2/g'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...