Почему sed не использует расширенный режим регулярных выражений по умолчанию?


10

Я использую sed. Насколько я мог видеть, я использовал регулярное выражение, но sed ничего не делал. Оказывается, что я использовал, \s+который sed не может понять, и когда я переключился на [ ]+это работало.

Таким образом, чтобы подвести итог, я сделал регулярное выражение, которое, чтобы это работало, я должен был избежать почти всего и удалить \sпробел. Кажется, есть способ избежать всего этого, -rпоэтому я хотел спросить:

  1. Почему не -rрежим по умолчанию для sed? Почему я должен был пойти на столько неприятностей, чтобы избежать всего?
  2. manговорит, что есть опция --posixи что «POSIX.2 BRE должны поддерживаться» К чему это относится? Режим NFA / DFA?

Кроме того, чтобы сопоставить пробелы, такие как \s+использование perl [[:space:]][:space:]]*в BRE и то же самое или [[:space:]]+в ERE.
JRM

Ответы:


10

По поводу 1) Ответ такой же, как и для любого другого инструмента, который был улучшен за десятилетия. :)

Вы не хотите нарушать существующие сценарии, изменяя поведение по умолчанию.

Re 2) Это не имеет ничего общего с соответствующим двигателем; вопрос только в том, какой набор регулярных выражений поддерживается. POSIX BRE означает «основное регулярное выражение».


Как насчет пункта (2)?
Джим

Помогает ли редактирование?
Тинк

1

Относительно пункта 2: gnu sedиспользует GNU BREпо умолчанию. Чтобы использовать POSIX, BREвы должны указать--posix

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.