文字列をフィルタリングした後の任意のユーザー名

文字列をフィルタリングした後の任意のユーザー名

この情報を含むAPIステータスの完全なリストがあります。別のファイルまたは変数に送信できるように、ユーザー名の名前をgrepする必要があります。

たとえば、

[{"id":"1onyc4b1otgmtrmw37h83rjs9w","create_at":1542718790947,"update_at":1542728017634,"delete_at":0,"username":"ivan.ivanov","auth_data":"".

「username」の後に文字列を取得する必要があります。結局、次のような文字列しかありません。イワン・イヴァノフそれとも名前が何であれ。

答え1

これが正しいjson文字列である場合は、次のように解析できますjq

your_api_call | jq -r '.[]["username"]'

または

jq -r '.[]["username"]' file

しかし、提供した文字列は正しいjsonではありません。]}最後に右括弧()が欠落してa.に置き換えられました。

jqほとんどのパッケージマネージャで利用可能です。たとえば、次のようにインストールします。

sudo apt install jq

どうすれば必要使用grepおよび所有pgrep/grep -P使用可能:

grep -Po '"username":"\K[^"]*'

答え2

次のコマンドを使用しましたが、正常に動作しました。

echo "[{"id":"1onyc4b1otgmtrmw37h83rjs9w","create_at":1542718790947,"update_at":1542728017634,"delete_at":0,"username":"ivan.ivanov","auth_data":""." |
  sed "s/,/\n/g" |
  awk -F ":" '/username/{print $NF}'

出力

ivan.ivanov

答え3

それともこれを行うことができます。JTC:

bash $ jtc -w'<username>l+0' your.json
"ivan.ivanov"
bash $ 

jsonに複数のユーザー名がある場合は、すべてのユーザー名が印刷されます。それ以外の場合は(1つだけを希望する場合)、「+0」を削除してください。最初のユーザー名のみが印刷されます。

関連情報