2016-04-18 2 views
0

Я пытаюсь написать сценарий оболочки, чтобы найти замену этой строки кода на Ubuntu 14.04.SED заменяет содержимое одиночными и двойными кавычками

//Code before script runs 
/*define('FS_METHOD','direct');*/ 

//Code after script runs 
define('FS_METHOD','direct'); 

sudo sed -i "[email protected]/*define('FS_METHOD','direct');*/@define('FS_METHOD,'direct');@g" /home/example/example.txt 

После выполнения этой строки кода я не получаю никаких ошибок, но не удалить/* */Я считаю, что это происходит из-за одинарные кавычки. Я попытался убежать от них с обратной косой чертой, но это тоже не сработает. Кто-нибудь знает, как заставить это работать?

ответ

2

Нет, проблема в том, что * является RE metacharcter так что вам нужно, чтобы избежать его, чтобы он трактуются буквально:

$ sed "[email protected]/\*define('FS_METHOD','direct');\*/@define('FS_METHOD,'direct');@g" file 
define('FS_METHOD,'direct'); 

или более сжато:

$ sed "[email protected]/\*\(define('FS_METHOD','direct');\)\*/@\[email protected]" file 
define('FS_METHOD','direct'); 
+0

Я попробовал оба этих метода и ни один из них не работал для меня. Я провел обе строки в моем терминале на OSX и ubuntu, и ни один из них не работал. Я не могу думать о том, что я буду делать неправильно. – Drew

+0

Возможно, вам нужно удвоить все, потому что вы работаете под sudo? idk ... Ведет ли он себя по своему желанию, когда вы не запускаете его под sudo? Получает ли он ожидаемый результат, если вы не включаете опцию '-i' (исключая проблему с разрешением файла). –

+0

Пытался использовать sudo и не использовать его, и он дает тот же результат. Хотя он работает, если я удаляю одиночные кавычки. – Drew

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