LINUX.ORG.RU

История изменений

Исправление Kroz, (текущая версия) :

что делает SED в таком исполнении?

Экранирует спец. символы:

s/\\/\\\\/g; '\' -> '\\'
s/\//\\\//g; '/' -> '\/'
s/\./\\./g;  '.' -> '\.'
s/\*/\\*/g;  '*' -> '\*'
s/\^/\\^/g;  '^' -> '\^'
s/\$/\\$/g;  '$' -> '\$'
s/\[/\\[/g;  '[' -> '\['
s/\]/\\]/g;  ']' -> '\]'

А -regextype sed меняет их в обратную сторону?

Главная проблема с регулярками в том, что народ не договорился когда и что экранировать. Есть несколько нотаций. Например:

$ echo 'theeeee text ' | grep 'e\{2,5\}'
theeeee text
$ echo 'theeeee text ' | grep -E 'e\{2,5\}'
$ echo 'theeeee text ' | grep -E 'e{2,5}'
theeeee text
То есть в basic regexp (который в grep по умолчанию) фигурные скобки не нужно экранировать (а если экранировать, то они будут трактоваться как спецсимволы), а в Extended regexp - всё с точностью до наоборот.

Как в find по умолчанию я не нашел. C -regextype sed я гарантировал, что find будет вести себя в точности как sed. А для sed я знаю какие символы нужно экранировать: \/.*^$[] . Что и делает | sed '...'.

Исходная версия Kroz, :

что делает SED в таком исполнении?

Экранирует спец. символы:

s/\\/\\\\/g; '\' -> '\\'
s/\//\\\//g; '/' -> '\/'
s/\./\\./g;  '.' -> '\.'
s/\*/\\*/g;  '*' -> '\*'
s/\^/\\^/g;  '^' -> '\^'
s/\$/\\$/g;  '$' -> '\$'
s/\[/\\[/g;  '[' -> '\['
s/\]/\\]/g;  ']' -> '\]'

А -regextype sed меняет их в обратную сторону?

Главная проблема с регулярками в том, что народ не договорился когда и что экранировать. Есть несколько нотаций. Например:

$ echo 'theeeee text ' | grep 'e\{2,5\}'
theeeee text
$ echo 'theeeee text ' | grep -E 'e\{2,5\}'
$ echo 'theeeee text ' | grep -E 'e{2,5}'
theeeee text
То есть в basic regexp (который в grep по умолчанию) фигурные скобки не нужно экранировать (а если экранировать, то они будут трактоваться как спецсимволы) а в Extended regexp - всё с точностью до наоборот.

Как в find по умолчанию я не нашел. C -regextype sed я гарантировал, что find будет вести себя в точности как sed. А для sed я знаю какие символы нужно экранировать: \/.*^$[] . Что и делает [incode]| sed '...'[/incode].