2015-08-12 9 views
1

Я пишу скрипт, который изменяет пути в файле. Это то, что я хочу сделать. Если у меня есть файл с строкой «/ path/to/wrong/location», я хочу изменить его на «/ path/to/correct/location». Я попытался с помощью СЭД, чтобы сделать это, делая это ...sed: Использование переменной в sed

sed -i "s/$badpath/$goodpath/g" file

Делая это, хотя, абсолютно ничего не делает, и я не могу за жизнь мне понять это. Мне нужно использовать переменную для плохого пути, но хороший путь можно выписать (так как этот никогда не изменяется). Как это сделать?

Дополнительная информация:

Я использую GNU СЭД, поэтому -i флаг действителен.

+2

Do $ BADPATH или $ goodpath есть/в них? Это испортит команду s. Я предлагаю использовать разные разделители. – walrii

+0

Обычно я фиксировал переменные, чтобы добавить \ перед любым/("/" -> "\ /"). К сожалению, это не помогает. – markzz

+0

попробуйте распечатать vars, чтобы посмотреть, как ваша подстановка с '\' to '\ /' работает – HuStmpHrrr

ответ

2

Кажется, работает для меня, после фиксации разделителей:

$ cat sample 
/path/to/incorrect/location 
$ badpath="/path/to/incorrect/location" 
$ goodpath="/path/to/correct/location" 
$ sed -i "s|$badpath|$goodpath|" sample 
$ cat sample 
/path/to/correct/location 
+0

Я действительно не знал, что вы можете использовать разные разделители. Благодарю. – markzz