Я рад, что grep
поддерживает Perl-совместимые регулярные выражения с опцией -P
.
Есть ли причина, по которой инструмент sed
не имеет этой функции?
В случае GNU Sed заявленная причина выглядит как
Я боялся, что она попала в одну из этих «трещин» ... хотя из того, что было В то время я сказал, что некоторая часть работы уже выполнена, и это выглядело как вопрос документации и упаковки ... (хотя, я признаю, в Computer Sci последние 10% работы часто занимают 90% времени ...
blockquote>См. Журналы отчетов об ошибках GNU - # 22801 статус зафиксированных изменений: обновление RE 'sed' для включения синтаксиса perlRE - или поиск в sed- Разработайте архивы для «PCRE», если вам нужно больше подробностей.
Не забывайте, что вы можете использовать сам
perl
для многих простых однострочников, для которых вы можете использовать PCRE в [ 111].
Обходной путь:
Вы можете использовать «Патологический эклектичный мусорный список»:
perl -pe 's/../../g' file
или встроенную замену:
perl -pie 's/../../g' file
Это работает для случаев, когда Я использую sed
. Если все усложняется, я пишу небольшой скрипт на python.
Лично мне было проще делать это на 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