2015-01-10 7 views
2

Я хочу заменить строки, содержащие строку с некоторыми специальными символами. Я использовал \ и \ для вызова специальных символов, но ничего не изменилось в файле. я использую СЭД, как это:замените строку, содержащую строку со специальными символами

> sed -i '/pnconfig\[\'dbhost\'\] = \'localhost\'/c\This line is removed.' tco.php 

я просто хочу, чтобы найти строки, которые содержат:

$pnconfig['dbhost'] = 'localhost'; 

и заменить эту строку с:

$pnconfig['dbhost'] = '1.1.1.1'; 

ответ

1

Оберните СЭД в двойных кавычках, как

sed -i "s/\(pnconfig\['dbhost'\] = \)'localhost'/\1'1.1.1.1'/" filename 

Test

$ echo "\$pnconfig['dbhost'] = 'localhost';" | sed "s/\(pnconfig\['dbhost'\] = \)'localhost'/\1'1.1.1.1'/" 
$pnconfig['dbhost'] = '1.1.1.1'; 
+0

, которая работала благодаря – Mickey

+0

, но зачем использовать /\1'1.1.1.1'/ вместо /'1.1.1.1'/? – Mickey

+0

@Mickey Потому что '\ 1' - первая группа захвата, которая contians' pnconfig \ ['dbhost' \] = '. Мне было немного ленив, чтобы набирать их снова и снова в части replacemnet: P – nu11p01n73R

0

использования, как показано ниже:

sed -i.bak '/pnconfig\[\'dbhost\'\] = \'localhost\'/pnconfig\[\'dbhost\'\] = \'1.1.1.1\'/' tco.php 

Скорее это п изменение файла в первый раз, создавать резервные копии, а затем искать для вашего шаблона, а затем заменить его другим, как указано выше в файле tco.php

0

Вам не придется беспокоиться о backslashing одиночные кавычки, используя двойные кавычки для СЭД.

sed -i.bak "/pnconfig\['dbhost'\] = 'localhost'/s/localhost/1.1.1.1/g" File 
0

Попробуйте этот.

sed "/$pnconfig\['dbhost']/s/localhost/1.1.1.1/"