2014-11-16 146 views
-1

我會用SSH和正則表達式使用SSH sed和正則表達式

例如在文件中的config.php替換字符串在一條線上我會OK_REPLACED取代TO_REPLACE:

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

您好阿維納什謝謝 我直接做命令膩子 – amorino

+0

您好阿維納什謝謝 它的工作,但它修改的許多其他線路,如「定義(」地址「‘TO_REPLACE’);」 – amorino

+0

非常感謝 像一個魅力工作 – amorino

1

,我們在您的sed線兩個問題。

1)您與報價混亂。如果你想避免逃跑,你應該包裝一種與另一種。像" ...' ...' ...' "'...."...."..."...'

2)sed的正則表達式默認是BRE,與-r(GNU SED)支持ERE,但他們都不支持non-greedy,所以你.*?不會與SED工作。

這一行應該以你的需要去:

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

這是確定的,現在謝謝非常多,我只是刪除了錨,因爲它與其他線 – amorino