如何在第一个正则表达式与sed匹配后插入一行?

时间:2014-02-04 02:09:11

标签: bash file-io sed

我有一些CmakeLists.txt个文件,我想在已知的include之后插入另一个include。所以,这就是我所拥有的:

include_directories(src include)

而且,这就是我想要的结果

include_directories(src include)
include_directories("${CMAKE_INSTALL_PREFIX}/include")

有关最佳方法的任何想法吗?我假设sed最有意义,但我愿意接受替代方案。

[edit]找到duplicate question

4 个答案:

答案 0 :(得分:1)

您可以将这个简单的sed命令与内联编辑一起使用:

sed -i.bak '/include_directories(src include)/a\
include_directories("${CMAKE_INSTALL_PREFIX}/include")
' CmakeLists.txt
  • 这使用a命令,在搜索到的字符串后附加一个新字符串。
  • -i.bak用于倾斜编辑输入文件。

答案 1 :(得分:0)

如果您对重复问题的答案不满意,可以试试这个:

sed '/include_directories(src include)/s/$/\
include_directories(\"${CMAKE_INSTALL_PREFIX}\/include\")/' filename

这可能或不起作用,具体取决于您的shell。如果没有,那么教训就是首先尝试简单的事情,然后再建立起来。

答案 2 :(得分:0)

sed是一个很好的工具,可以在单行上进行简单的替换,但对于其他任何你最好使用awk:

awk '{print} /include_directories\(src include\)/{print "include_directories(\"${CMAKE_INSTALL_PREFIX}/include\")"}' file

答案 3 :(得分:0)

另一个awk变体:

awk '/include_directories\(src include\)/{$0=$0 "\ninclude_directories(\"${CMAKE_INSTALL_PREFIX}/include\")"}8' file

如果找到模式,请在当前行中添加一个新行,然后全部打印。