2014-11-16 2 views
-1

Я бы заменить строку в соответствии с SSH и регулярное выражениеИспользование SSH SED и регулярное выражение

, например, в файле config.php я заменил бы TO_REPLACE с OK_REPLACED:

define('NAME', 'TO_REPLACE'); 

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

sed -i 's/^define('NAME', '\(.*?\)'/OK_REPLACED/g' config.php; 

, но это не помогло.

+0

Посмотрите на ваши цитаты. – hek2mgl

ответ

1

Изменение SED команды, как показано ниже,

sed -i "s/^\(define('NAME', *'\)[^']*'/\1OK_REPLACED'/g" config.php 

Пример:

$ echo "define('NAME', 'TO_REPLACE');" | sed "s/^\(define('NAME', *'\)[^']*'/\1OK_REPLACED'/g" 
define('NAME', 'OK_REPLACED'); 
+0

Привет, Авинаш спасибо Я делаю команду непосредственно в Putty – amorino

+0

Привет, Avinash спасибо Это сработало, но оно изменило так много других линий, как 'define (' ADDRESS ',' TO_REPLACE '); – amorino

+0

Большое спасибо Работали как шарм – amorino

1

Есть две проблемы в вашей SED линии.

1) Вы перепутались с кавычками. если вы хотите избежать побега, вы должны обернуть один вид другим. как " ...' ...' ...' " или '...."...."..."...'

2) СЭД регулярное выражение по умолчанию BRE, с -r (гну SED) он поддерживает ERE, но ни один из них не поддерживает non-greedy, поэтому ваш .*? не будет работать с СЭД.

Эта линия должна идти с вашими потребностями:

sed -i "s/^\(define('NAME', '\)[^']*/\1OK_REPLACED/" config.php 
+0

Теперь все в порядке спасибо я просто удалил якорь, потому что это было с другими линиями – amorino

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