Sed с PCRE (например, grep -P)

Я рад, что grep поддерживает Perl-совместимые регулярные выражения с опцией -P.

Есть ли причина, по которой инструмент sed не имеет этой функции?

7
задан 11 December 2018 в 23:08

3 ответа

В случае GNU Sed заявленная причина выглядит как

Я боялся, что она попала в одну из этих «трещин» ... хотя из того, что было В то время я сказал, что некоторая часть работы уже выполнена, и это выглядело как вопрос документации и упаковки ... (хотя, я признаю, в Computer Sci последние 10% работы часто занимают 90% времени ...

См. Журналы отчетов об ошибках GNU - # 22801 статус зафиксированных изменений: обновление RE 'sed' для включения синтаксиса perlRE - или поиск в sed- Разработайте архивы для «PCRE», если вам нужно больше подробностей.

Не забывайте, что вы можете использовать сам perl для многих простых однострочников, для которых вы можете использовать PCRE в [ 111].

9
ответ дан 11 December 2018 в 23:08

Обходной путь:

Вы можете использовать «Патологический эклектичный мусорный список»:

perl -pe 's/../../g' file

или встроенную замену:

perl -pie 's/../../g' file

Это работает для случаев, когда Я использую sed. Если все усложняется, я пишу небольшой скрипт на python.

20
ответ дан 11 December 2018 в 23:08

Лично мне было проще делать это на Python, чем на Perl или Sed.

cat file \
| python3 -c 'import sys, re; s = sys.stdin.read(); s=re.sub(r"regex", "replace string", s); print(s);' \
| sudo tee file

полный пример

# add quay and docker registries to approved cri-o registries
cat /etc/crio/crio.conf \
| python3 -c 'import sys, re; s = sys.stdin.read(); s=re.sub(r"#registries\s+\=\s+\[\n#\s+\]", "registries = [\"docker.io\",\"quay.io\"]", s); print(s);' \
| sudo tee /etc/crio/crio.conf

2
ответ дан 27 December 2020 в 06:44

Другие вопросы по тегам:

Похожие вопросы: