2013-03-07 95 views
0

sed如何使用特殊符号运行?我想sed和逃逸字符

这是我的脚本(它修复在Ubuntu下Qt工程文件,“因为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

您应该提供一个无法替代的示例文件(或摘录)。 – 2013-03-07 21:53:59

+2

如果您的模式包含'/'字符,请不要使用'/'作为您的'sed'分隔符。 – 2013-03-07 21:54:14

+0

@CarlNorum我用“s @ $ OldInclude @ $ NewInclude @ g”替换了“s/$ OldInclude/$ NewInclude/g”。它的工作原理,但没有替代:( – 2013-03-07 22:11:41

回答

0

你需要,如果你想SED放在一个换行符使用\ n字符在您更换:

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

产生的结果我想你想。