Команда sed работает с флагом e, но не с E

Просто добавление к различиям, упомянутым здесь в других ответах.

Поскольку вызов библиотеки — это просто вызов функции, переключения из пространства пользователя в пространство ядра не происходит. С другой стороны, системный вызов приводит к переключению из пространства пользователя в пространство ядра, поскольку системный вызов работает в режиме ядра.

2
20.09.2019, 14:47
1 ответ
sed -n -E 's/[ -n "$ID" -a "$ID" -le 200 ]/#&/p'

Не работает так, как вы ожидаете, это скорее совпадение:[...]— это набор совпадающих символов. Внутри этой коллекции у вас есть диапазон -nот пробела (0x20 )доn(0x6E ), который может включать[(0x5B ), в зависимости от ваших региональных настроек. Таким образом, коллекция соответствует первому символу. Видите, что происходит, когда вы берете #&___в качестве замены... не в ваших намерениях, я полагаю?

И это причина того, что ваш полный регистр не работает. :Соответствующим символом для коллекции является ], потому что за ним следует остальная часть шаблона, поэтому туда вставляется #.

Проблема с расширенным регулярным выражением аналогична предположению @steeldriver :$привязывает шаблон:

A ( '$' ) outside a bracket expression shall anchor the expression or subexpression it ends to the end of a string; such an expression or subexpression can match only a sequence ending at the last character of a string. For example, the EREs "ef$" and "(ef$)" match "ef" in the string "abcdef", but fail to match in the string "cdefab", and the ERE "e$f" is valid, but can never match because the 'f' prevents the expression "e$" from matching ending at the last character.

Таким образом, в ERE литерал $необходимо экранировать, а в BRE его нужно экранировать только в том случае, если он является последним символом шаблона.

Также обратите внимание, что -eпомечает следующий аргумент как сценарий и является необязательным, если имеется только один сценарий, а -Eявляется переключателем. Удаление -eвместо ' -E `работает только в том случае, если есть только один сценарий, потому что он все равно был излишним.

5
27.01.2020, 21:55

Теги

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