我需要在某次匹配后将命令(作为字符串)插入现有文件。现有字符串是一个长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 "$@"
}
提前致谢!
答案 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