将文本添加到特定字符串之后的文件中

问题描述:

我有build.gradle文件。我需要搜索字符串android {,如果找到;在下一行中,它应该回显一些内容,如echo "signing config={..SOME CODE.....} > build.gradle。这可能吗。使用上面的代码,我可以从命令行回显代码,只在开始或结束。请帮助我。将文本添加到特定字符串之后的文件中

编辑:

例...我gradle这个文件是

buildscript { 
CODE 
} 

dependencies { 
    CODE 
} 
} 
apply plugin: 'com.android.application` 

android { 

defaultConfig { 
    CODE 
} 
} 

这里就检测android {作为字符串follwing应该android {后追加如下

buildscript { 
CODE 
} 

dependencies { 
    CODE 
} 
} 
apply plugin: 'com.android.application` 

android { 

**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR** 
defaultConfig { 
    CODE 
} 
} 
+1

一个例子以及预期的输出会更好。 – 2015-03-02 11:42:40

+0

@AvinashRaj按照你的建议修改了这个问题 – 2015-03-02 11:54:52

什么关于简单的awk?在结束

awk '/^android/{print;print "**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR**";next}1' build.gradle 

'1' 可能会有点神秘,更详细的版本:

awk '/^android/{print;print "**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR**";next}{print $0}' build.gradle 

就地变化:

{ rm build.gradle && awk '/^android/{print;print "**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR**";next}{print $0}' > build.gradle ; } < build.gradle 
+0

当我在命令行中尝试了上面的内容时,文本就像我在命令行中想要的一样。但是当我打开我的gradle文件时,它并没有改变。 – 2015-03-03 09:32:51

+1

正确,awk在默认情况下无法正常工作。这里是处理这个问题的非常典型的方法:'{rm build.gradle && awk'/^android/{print; print“**这里添加了命令的文本应该出现**”; next} {print $ 0}' > build.gradle; } 4.1.0,则可以选择进行就地更改(-i)。 – wisent 2015-03-03 20:49:21

+0

它的工作..谢谢..你能请更新答案,以便我可以接受它是正确的... – 2015-03-04 06:21:05

一个sed -i调用编辑-IN-地方会做你想做的事:

sed -i 's/android {/android {\n**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR**/' 

您可以使用sed调用的其他几种变体来调整您的精确需求。