我會用SSH和正則表達式使用SSH sed和正則表達式
例如在文件中的config.php替換字符串在一條線上我會OK_REPLACED取代TO_REPLACE:
define('NAME', 'TO_REPLACE');
我試過這個命令:
sed -i 's/^define('NAME', '\(.*?\)'/OK_REPLACED/g' config.php;
但它沒有任何幫助嗎?
我會用SSH和正則表達式使用SSH sed和正則表達式
例如在文件中的config.php替換字符串在一條線上我會OK_REPLACED取代TO_REPLACE:
define('NAME', 'TO_REPLACE');
我試過這個命令:
sed -i 's/^define('NAME', '\(.*?\)'/OK_REPLACED/g' config.php;
但它沒有任何幫助嗎?
更改您的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');
,我們在您的sed線兩個問題。
1)您與報價混亂。如果你想避免逃跑,你應該包裝一種與另一種。像" ...' ...' ...' "
或'...."...."..."...'
2)sed的正則表達式默認是BRE,與-r
(GNU SED)支持ERE,但他們都不支持non-greedy
,所以你.*?
不會與SED工作。
這一行應該以你的需要去:
sed -i "s/^\(define('NAME', '\)[^']*/\1OK_REPLACED/" config.php
這是確定的,現在謝謝非常多,我只是刪除了錨,因爲它與其他線 – amorino
看一看你的報價。 – hek2mgl