正则表达式列出所有行
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
我有下面的文字,如果你仔细看,有两行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