Почему 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

user2351281
источник