正则表达式列出所有行

Regex to list all rows

我有下面的文字,如果你仔细看,有两行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=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={}}]

这是我目前所拥有的。

^(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

你可以使用这个gnu-awk:

awk -v RS='\[?BuildType_Decorated' 'NF{ print prt [=10=] } { 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={}}]

是这样的吗?

((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