空白を含むjsonフィールドの検索に問題があり、変数にスペースも含まれるクエリが含まれています。検索を使用してきましたが、contains
構文全体を検索する方法がわかりません。
COUNTRY="United States"
CITY='"New York"'
cat testdata | jq --arg COUNTRY "$COUNTRY" --arg CITY "$CITY" -r \
'.wireguard[] | select(.country == $COUNTRY) | select(.city|contains('$CITY'))'
jqコマンドを実行しようとすると、次のエラーが発生します。
jq: error: syntax error, unexpected $end, expecting QQSTRING_TEXT or QQSTRING_INTERP_START or QQSTRING_END (Unix shell quoting issues?) at <top-level>, line 1:
.wireguard[] | select(.country == $COUNTRY) | select(.city|contains("New
jq: 1 compile error
変数にqoutesが含まれていますが、変数の空白が原因でクエリが停止するようです。
私も試してみましselect(.city|contains($CITY))
たが、何も起こりませんでした(エラーなし)。ただし、select(.city|contains("New York"))
クエリは正常に実行されます。CITY
変数の内容が"New York"
。
「含む」クエリでスペースを含む変数をどのように使用しますか?
私がテストしているJsonは次のとおりです。
{
"wireguard": [
{
"gateway": "us-ga.wg",
"country_code": "US",
"country": "United States",
"city": "Atlanta, GA",
"isp": "Datapacket"
},
{
"gateway": "us-ca.wg",
"country_code": "US",
"country": "United States",
"city": "Los Angeles, CA",
"isp": "Datapacket"
},
{
"gateway": "us-ny.wg",
"country_code": "US",
"country": "United States",
"city": "New York, NY",
"isp": "M247"
},
{
"gateway": "us-ut.wg",
"country_code": "US",
"country": "United States",
"city": "Salt Lake City, UT",
"isp": "100TB"
},
{
"gateway": "us-fl.wg",
"country_code": "US",
"country": "United States",
"city": "Miami, FL",
"isp": "Quadranet"
},
{
"gateway": "us-nj.wg",
"country_code": "US",
"country": "United States",
"city": "New Jersey, NJ",
"isp": "Quadranet"
},
{
"gateway": "us-nv.wg",
"country_code": "US",
"country": "United States",
"city": "Las Vegas, NV",
"isp": "M247"
}
]
}
ベストアンサー1
シェル定義は、CITY
実際にはテキストに二重引用符が含まれていることを意味します。これは何も一致しません。
$CITY
isをパラメータの代わりにシェル変数として使用しますjq
。また、使用時に引用符を使用したため、シェルはそれを解析でき、JSONはとの間"New
のスペースに分割されますYork"
。
この試み。どちらがシェル変数で、どちらがシェル変数かを明確にするために、シェル変数の大文字と小文字を変更しました。jq
country='United States'
city='New York'
jq --arg COUNTRY "$country" --arg CITY "$city" -r \
'.wireguard[] | select(.country == $COUNTRY) | select(.city|contains($CITY))' testdata
出力
{
"gateway": "us-ny.wg",
"country_code": "US",
"country": "United States",
"city": "New York, NY",
"isp": "M247"
}