【问题标题】:Add text to a file in between after a particular string在特定字符串之后的文件中添加文本
【发布时间】:2015-03-02 11:41:17
【问题描述】:

我有 build.gradle 文件。我需要搜索一个字符串android {,如果找到;在下一行,它应该将一些内容回显为echo "signing config={..SOME CODE.....} > build.gradle。这可能吗。使用上面的代码,我可以从命令行回显代码,仅在开头或结尾处。请帮帮我。

编辑:

示例...我的 gradle 文件如下

buildscript {
CODE
}

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

android {

defaultConfig {
    CODE
}
}

在将android { 检测为字符串时,应在android { 之后附加以下内容,如下所示

buildscript {
CODE
}

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

android {

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

【问题讨论】:

  • 一个示例以及预期的输出会更好。
  • @AvinashRaj 按照您的建议编辑了问题

标签: bash command-line awk echo


【解决方案1】:

简单的 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

【讨论】:

  • 当我在命令行中尝试上述操作时,文本在命令行本身中的显示与我想要的完全一样。但是当我打开我的 gradle 文件时,它并没有改变。
  • 正确,awk 默认不能就地工作。这是处理该问题的非常典型的方法:{ rm build.gradle &amp;&amp; awk '/^android/{print;print "**HERE THE TEXT ADDED IN THE COMMAND SHOULD APPEAR**";next}{print $0}' &gt; build.gradle ; } &lt; build.gradle .. 或者如果您有 awk>4.1.0,则可以选择就地进行更改 (-i)。
  • 它正在工作..谢谢..您能否更新答案,以便我可以接受它是正确的...
  • 一切正常。但是当我使用代码 { rm build.gradle &amp;&amp; awk '/^android/{print;print "signingConfigs { release { CODE } }";next}{print $0}' &gt; build.gradle ; } &lt; build.gradle 时它不起作用
  • 这应该适合你:{ rm build.gradle &amp;&amp; awk "/^android/{print;print \"signingConfigs{release{storeFile file('PATH') storePassword 'PASSWORD' keyAlias 'ALIAS' keyPassword 'PASSWORD'}}\";next}1" &gt; build.gradle; } &lt; build.gradle
【解决方案2】:

sed -i 调用 edit-in-place 会做你想做的事:

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

sed 调用还有其他几种变体,您可以使用它来根据您的具体需求进行定制。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-13
    • 1970-01-01
    • 2017-09-07
    • 2015-08-15
    • 2017-10-10
    • 2022-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多