sed和逃避字符

时间:2013-03-07 21:51:34

标签: bash ubuntu sed

sed如何使用特殊符号进行操作?我正试图

这是我的脚本(它修复了Ubuntu下的Qt项目文件,'cos 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

但它没有取代任何东西 - 看起来我对输入字符串做错了。

如何准确更换它们?我要更新的文件如下:

1 个答案:

答案 0 :(得分:0)

如果你想让sed放入换行符,你需要在替换中使用\ n字符:

$ OldInclude='QT       += multimedia'
$ NewInclude='\nINCLUDEPATH += /usr/include/QtMobility\nINCLUDEPATH += /usr/include/QtMultimediaKit'
$ sed "s@$OldInclude@$NewInclude@g" your_snippet.txt 

产生我认为你想要的结果。