2011-12-29 2 views
0

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

sed 's/^define.*$/'define('AUTH_KEY',   'r*v8]Wic;@Y4{|0EQ9Z?~W,-P}k:d{k)ylAFHm-d(tY6v?U,5{hn].e9eH%/Xmdy');'/' change.html 

Я прочитал где-то еще здесь, что вам нужно, чтобы избежать символов, но не смог заставить его работать с ответом, который я нашел здесь: Escape a string for a sed replace pattern

Любая помощь, или указатель в правильном направлении, очень ценится, спасибо! :)

ответ

2

Знайте, что sed может принимать любой символ в качестве разделителя и что / является обычным. Если вы можете гарантировать, что ваш ключ свободен от пробелов, вы можете попробовать:

sed 's ^define.*$ &(yourkey) ' 
+0

я получаю сообщение об ошибке при использовании обновленного кода, он говорит: "ошибка синтаксиса около неожиданной лексемы (" Может быть, я набранный Код:.? 'СЭД„с/^ определить * $ &“. (определить ('auth_key', 'г * v8] Wic; @ Y4 {| 0EQ9Z ~ W, -P?} к: д {к) ylAFHm-д (tY6v U, 5 {Hn] .e9eH%/Xmdy?');) ''/'change.html' – Smitty

+0

@Alen: Посмотрите более точно на мой пост. И «токен является особенным для оболочки, вам придется обойти это. – thiton

0

Попробуйте что-то вроде этого -

Присвоить текст замены переменной -

[jaypal:~/Temp] abc="'define('AUTH_KEY',   'r*v8]Wic;@Y4{|0EQ9Z?~W,-P}k:d{k)ylAFHm-d(tY6v?U,5{hn].e9eH%/Xmdy');'" 

Используйте эту переменную in awk'ssub функция.

[jaypal:~/Temp] awk -v rep="$abc" '{sub(/^define.*$/,rep,$0); print}' change.html 
Смежные вопросы