首页 > 解决方案 > 将花括号块放入 gradle 文件

问题描述

我有一个 build.gradle 文件片段,如下所示:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"
    defaultConfig {
        applicationId "com.softtech.myApp"
        minSdkVersion 17
        targetSdkVersion 24
        versionCode 1
        versionName "1.1"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
}

我需要将以下块放入上面的 gradle 片段中(在 jenkins 中执行 shell)

myConfig{
    debug{
        myFile = file("/Users/john/a/b/c/d/x.file")
    }
}

如下所示:

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"
    defaultConfig {
        applicationId "com.softtech.myApp"
        minSdkVersion 17
        targetSdkVersion 24
        versionCode 1
        versionName "1.1"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    *myConfig{
        debug{
            myFile = file("/Users/user1/a/b/c/d/x.file")
        }
    }*
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
}

我生锈了,因为我很长时间没有使用高级 AWK,感谢您的帮助,无论是 awk、sed 还是 perl

试图将 RS 用作“}\nbuild”并打印字段但没有用

谢谢

标签: awkcurly-braces

解决方案


$ cat tst.sh
#!/usr/bin/env bash

awk '
NR==FNR { rec = (NR>2 ? rec ORS : "") $0; next }
$1 == "buildTypes" {
    indent = $0
    sub(/[^[:space:]].*/,"",indent)
    gsub(/\n/,"&"indent,rec)
    print indent rec
}
{ print }
' <( printf '
myConfig{
    debug{
        myFile = file("/Users/john/a/b/c/d/x.file")
    }
}
' ) "$1"

.

$ ./tst.sh file.gradle
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"
    defaultConfig {
        applicationId "com.softtech.myApp"
        minSdkVersion 17
        targetSdkVersion 24
        versionCode 1
        versionName "1.1"
        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }
    myConfig{
        debug{
            myFile = file("/Users/john/a/b/c/d/x.file")
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
        }
    }
}

推荐阅读