sed在匹配模式在同一行之后插入一个字符串

时间:2016-03-08 18:16:06

标签: regex linux bash sed

我需要在某次匹配后将命令(作为字符串)插入现有文件。现有字符串是一个长make命令,我只需要通过在特定位置插入另一个字符串来修改它。我尝试使用sed,但要么在匹配字符串之前/之后添加新行,要么替换它。我想知道至少是否有可能用sed完成我想要的东西或者我应该使用别的东西?你能给我一些提示吗?

示例:

该文件包含两个make命令,我只对没有bbnote的第二个命令感兴趣。

oe_runmake_call() {
        bbnote make -j 8 CROSS_COMPILE=arm-poky-linux-gnueabi- CC="arm-poky-linux-gnueabi-gcc" "$@"
        make -j 8 CROSS_COMPILE=arm-poky-linux-gnueabi- CC="my_command_here arm-poky-linux-gnueabi-gcc"  --sysroot=/some/path "$@"

}

提前致谢!

这里是代码: http://hastebin.com/tigatoquje.go

2 个答案:

答案 0 :(得分:0)

您可以使用 Sed

执行此类操作
sed -r 's:(^\s+make.+ CC=\"):\1your_command_here :g' file.log >outfile.log

或使用sed就地编辑:

sed -ir 's:(^\s+make.+ CC=\"):\1your_command_here :g' file.log

没有sed正则表达式选项:

sed 's:\(^\s\+make.\+ CC=\"\):\1your_command_here :g' file.log > outfile.log

输出:

oe_runmake_call() {
        bbnote make -j 8 CROSS_COMPILE=arm-poky-linux-gnueabi- CC="arm-poky-linux-gnueabi-gcc" "$@"
        make -j 8 CROSS_COMPILE=arm-poky-linux-gnueabi- CC="your_command_here arm-poky-linux-gnueabi-gcc"  --sysroot=/some/path "$@"

}

如何:

sed -r 's:(^\s+make.+ CC=\"):\1your_command_here :g'

-r =正则表达式选项

^make(CC=\") =以make开头,并在CC="

上设置一个捕获组

\1your_command_here = \1引用捕获组然后添加命令文本

答案 1 :(得分:0)

你可以使用perl。

YOUR_COMMAND替换为您要添加的内容。这假定您的文件位于file.txt

perl -i.bak -pl -e '/^make/ and s/(CC=".*")/$1 YOUR_COMMAND /' file.txt