2014-11-16 4 views
-1

Я хотел бы заменить строку в строке с оболочкой и регулярным выражением.regex in sed для поиска и замены (неверная ссылка)

Например, в файле configuration.php я хотел бы заменить TO_REPLACE с OK_REPLACED:

public $user = 'TO_REPLACE'; 

Я попробовал эту команду:

cd ~/public_html; sed -i "s/^\public $user = *'[^']*'/\1OK_REPLACED'/g" configuration.php 

, но я получаю эту ошибку

sed: -e expression #1, char 39: invalid reference \1 on `s' command's RHS 

Я тоже пробовал этот, но ничего

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 

ответ

0

Вам нужно «сгруппировать» скобки вокруг куска выражения, которое вам нужно заменить на «\ 1»: в этом случае все до первого «».

+0

Здравствуйте спасибо Не могли бы вы сделать мне пример? Я пробовал несколько возможностей, но ничего :( – amorino

+0

Я бы сделал что-то вроде этого: sed "s/\ (public \ $ user = '\) [^'] * \ ('\)/\ 1OK_REPLACED \ 2/g" – shooper

1

\1 заменяется на все, что соответствует первой группе захвата в регулярном выражении, но у вас нет групп захвата. Вам нужно поместить группы захвата вокруг частей оригинальной строки, которые вы хотите скопировать в замену.

sed -i "s/^\(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 

Если вы хотите заменить все вхождения TO_REPLACE, вы можете просто сделать:

sed -i 's/TO_REPLACE/OK_REPLACED/g' configuration.php 
+0

Привет большое спасибо Теперь с новой командой я получаю: 'sed: -e выражение # 1, char 44: неверный reference \ 2 on' s 'команда RHS' – amorino

+0

Я не понимаю, почему. '\ 1' получает '' '' '' '' '' '' и '\ 2' получает все, что соответствует' = * '[^'] * '' – Barmar

+0

Здравствуйте, Вы можете изменить код по своему усмотрению Я бы хотел просто заменить' TO_REPLACE' на ' OK_REPLACED' – amorino

1

Я думаю, что ваша скобка должна быть сбалансирована. В вашем первом префикс с обратной косой чертой, а второй - нет. Попробуйте это:

sed -i "s/^\(public \$user = *'\)[^']*'/\1OK_REPLACED'/g" configuration.php 

или это:

sed -r -i "s/^(public \$user = *')[^']*'/\1OK_REPLACED'/g" configuration.php 
+0

Это должно решить вашу неопределенную ссылочную проблему. Тем не менее, я ничего не проверяю ... (опубликуйте, если возникнут другие проблемы, и вы не можете его решить). –

Смежные вопросы