2013-03-07 2 views
0

Как sed работает со специальными символами? Я пытаюсьsed и escape-символы

Это мой сценарий (он фиксирует Qt файл проекта под Ubuntu, «потому что Ubuntu не имеет Qt-multimadia):

OldInclude='QT  += multimedia' 
NewInclude=' 
     INCLUDEPATH += //usr//include//QtMobility 
     INCLUDEPATH += //usr//include//QtMultimediaKit' 

find -iname "*.pro" -type f -exec sed -i "s/$OldInclude/$NewInclude/g" {} \; 

В файле:

#------------------------------------------------- 
# 
# Project created by QtCreator 2013-03-07T02:19:23 
# 
#------------------------------------------------- 
QT  += multimedia 
QT  -= gui 
TARGET = MultiItem 
TEMPLATE = lib 
DEFINES += MULTIITEM_LIBRARY 
SOURCES += multiitem.cpp 
//Even more lines here 

Но он ничего не заменяет - похоже, что я делаю что-то неправильно со строками ввода.

Как их заменить? Файл я собираюсь обновить следующий:

+0

Вы должны предоставить файл примера (или выдержку), для которого он не может быть заменен. –

+2

Не используйте '/' для разделителей 'sed', если ваши шаблоны содержат символы'/'. –

+0

@CarlNorum Я заменил «s/$ OldInclude/$ NewInclude/g» на «s @ $ OldInclude @ $ NewInclude @ g». Он работает, но ничего не заменяет :( –

ответ

0

Вы должны использовать \ п символы в вашей замене, если вы хотите СЕПГА положить в новых строках:

$ OldInclude='QT  += multimedia' 
$ NewInclude='\nINCLUDEPATH += /usr/include/QtMobility\nINCLUDEPATH += /usr/include/QtMultimediaKit' 
$ sed "[email protected][email protected][email protected]" your_snippet.txt 

Производит результат я думаю, что вы хотите ,