sed / awkを使用して他の文字列に含まれる文字列を取得する方法。
TESTVAR='
{
icon : "icons/773_l.png",
id : 80,
initialState : true,
isPng : false,
label : "Imagery",
opacity : 1,
requestType : "UUID",
version : 79
}
,
{
icon : "thisicon",
id : 8080,
initialState : false,
isPng : true,
label : "Boundaries",
opacity : 1,
requestType : "NothingSpecial",
version : 8
}
version : 79
埋め込みオブジェクトを選択する必要がありますrequestType : "UUID"
。最初のブロック内のすべての項目を選択してバージョンを選択し、returnコマンドを使用するにはどうすればよいですか79
?私はこれをしばらく試してきましたが、最初のものの間ですべてを選択する方法を知りません{}
。これを行ったら、次に番号を見つけてくださいversion :
。
私はこれがうまくいくと思いましたが、そうではありませんでしたawk '/\{/{f=1;next}/\}/{f=0}f' test.txt
また、注文は保証されません。したがって、「UUID」を含む{
すべての項目を選択する必要があります}
。それから選択version : \([0-9]+\)
これは近いですが、あまりにも貪欲です。sed -e 's/{\(.*UUID.*\)}/\1/' test.txt
ベストアンサー1
私の心に最初に浮かんだのはsedでもawkでもありませんでした。
$ tr -d '\n' < file | grep -Po 'requestType : "UUID"\K.*? version : \K[0-9]*'
79
おそらくもっと簡単にできるでしょう。特に、「requestType」の直後に「version」が来ることを保証できれば、さらにそうです。
状況をもう少し複雑にversion
する必要がない場合は、次のようにします。requested Type
$ tr -d '\n' < file | grep -Po '{.[^}]*?requestType : "UUID".*?}' | grep -Po 'version : \K[0-9]*'
79
すべての部品に一致できる部品があれば印刷されます。
$ cat file
TESTVAR='
{
icon : "icons/773_l.png",
id : 80,
initialState : true,
isPng : false,
label : "Imagery",
opacity : 1,
version : 79,
requestType : "UUID"
}
,
{
icon : "thisicon",
id : 8080,
initialState : false,
isPng : true,
label : "Boundaries",
opacity : 1,
requestType : "NothingSpecial",
version : 8
}
,
{
icon : "icons/773_l.png",
id : 80,
initialState : true,
isPng : false,
label : "Imagery",
opacity : 1,
requestType : "UUID",
version : 87
}
,
{
icon : "icons/773_l.png",
id : 80,
version : 17,
initialState : true,
isPng : false,
label : "Imagery",
opacity : 1,
requestType : "UUID"
}
,
{
icon : "thisicon",
id : 8080,
requestType : "NothingSpecial",
initialState : false,
label : "Boundaries",
opacity : 1,
version : 18,
isPng : true
}
$ tr -d '\n' < file | grep -Po '{.[^}]*?requestType : "UUID".*?}' | grep -Po 'version : \K[0-9]*'
79
87
17