sed -i.bak -e 's/^\s+({\s+group.+;\s+port.+;)\s+cp.+/ \1 }/g' <file>
Dumb sed/Regex Mistake?
Я получаю сообщение об ошибке:
sed: -e expression #1, char 48: invalid reference \1 on ``s' command's RHS
Я сделал эту SED подачи команд несколько раз, прежде чем и не имел этот вопрос. Я наткнулся на нюансный характер, который мне не хватает? Я проверил регулярное выражение на веб-сайте, поэтому я уверен, что все в порядке. Я смотрел несколько примеров примеров онлайн только для этого и ничего не могу найти. Заранее спасибо. Пример строки для соответствия:
{ group = "127.0.0.1"; port = 222; cpu = 33; },
ли работа с ' 'S/^ [[: УПП e:]] * \ ({[[: space:]] * group. *; [[: space:]] * port. *; \) [[: space:]] * cp. */\ 1}/g''? –
Я не знаю, является ли это основной проблемой, но: чтобы скопировать скобки нужно было экранировать, '\ s' не поддерживается, вы должны использовать' [\ t] 'вместо или класс символа posix и квант + также не поддерживается. –
Эта ошибка связана с тем, что в режиме по умолчанию BRE 'sed' вы используете unescaped' (...) ', который не создает захваченную группу. Вам нужно использовать флаг '-E' для расширенного режима регулярного выражения, а затем' (...) 'сделает его группой. Кроме того, '\ s' следует заменить на' [\ t] ' – anubhava