1

我有以下文字,如果你仔细看,有两行 BuildType_Decorated。我正在尝试创建一个正则表达式来列出所有行,但我不明白:(

这是我的 temp.txt 文件。

[BuildType_Decorated{name=debug, debuggable=true, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, minifyEnabled=false, zipAlignEnabled=true, signingConfig=SigningConfig_Decorated{name=debug, storeFile=/ mypath/debug.keystore, storePassword=android, keyAlias=AndroidDebugKey, keyPassword=android, storeType=jks, v1SigningEnabled=true, v2SigningEnabled=true, v1SigningConfigured=false, v2SigningConfigured=false}, embedMicroApp=false, mBuildConfigFields={}, mResValues= {},mProguardFiles=[],mConsumerProguardFiles=[],mManifestPlaceholders={}},BuildType_Decorated{name=release,debuggable=false,testCoverageEnabled=false,jniDebuggable=false,pseudoLocalesEnabled=false,renderscriptDebuggable=false,renderscriptOptimLevel=3,minifyEnabled =假,zipAlignEnabled =真,signingConfig=null,embedMicroApp=true,mBuildConfigFields={},mResValues={},mProguardFiles=[/mypath/path/proguard-android-optimize.txt-4.1.1,/mypath/path/proguard-rules.pro], mConsumerProguardFiles=[], mManifestPlaceholders={}}]

这就是我到目前为止所拥有的。

^(BuildType_Decorated{).*(},)$

更新

我刚刚编写了这个脚本,但我无法打印两行(一个接一个)。

#!/bin/sh
value=`cat temp.txt`
valueWOBegin=`echo ${value/*====BUILDTYPES====/}`
valueWOEnd=`echo ${valueWOBegin/====END BUILDTYPES====*/}`
for string in "$(echo $valueWOEnd | grep -Po "((BuildType_Decorated).+?((?=, BuildType_Decorated)|(?=]$)))")"; do
    echo $string
done
4

2 回答 2

3

像这样的东西?

((BuildType_Decorated).+?((?=, BuildType_Decorated)|(?=]$)))

但实际上你可以使用除正则表达式、json 或其他方法之外的其他方法......

响应更新

#!/bin/bash

grep -Po "((BuildType_Decorated).+?((?=, BuildType_Decorated)|(?=]$)))" temp.txt | while read -r line ; do
    echo "$line"
    echo -e '--------\n'
done

于 2020-12-03T11:36:10.183 回答
2

你可以使用这个gnu-awk

awk -v RS='\\[?BuildType_Decorated' 'NF{ print prt $0 } { prt = RT }' file

[BuildType_Decorated{name=debug, debuggable=true, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, minifyEnabled=false, zipAlignEnabled=true, signingConfig=SigningConfig_Decorated{name=debug, storeFile=/mypath/debug.keystore, storePassword=android, keyAlias=AndroidDebugKey, keyPassword=android, storeType=jks, v1SigningEnabled=true, v2SigningEnabled=true, v1SigningConfigured=false, v2SigningConfigured=false}, embedMicroApp=false, mBuildConfigFields={}, mResValues={}, mProguardFiles=[], mConsumerProguardFiles=[], mManifestPlaceholders={}},
BuildType_Decorated{name=release, debuggable=false, testCoverageEnabled=false, jniDebuggable=false, pseudoLocalesEnabled=false, renderscriptDebuggable=false, renderscriptOptimLevel=3, minifyEnabled=false, zipAlignEnabled=true, signingConfig=null, embedMicroApp=true, mBuildConfigFields={}, mResValues={}, mProguardFiles=[/mypath/path/proguard-android-optimize.txt-4.1.1, /mypath/path/proguard-rules.pro], mConsumerProguardFiles=[], mManifestPlaceholders={}}]
于 2020-12-03T10:50:18.477 回答