のすべてのインスタンスを検索し"type":"FollowEvent"
、それらのインスタンス内で、文字列"actor":
の後に が続かない場合は{
、"
の直後に続くで囲まれた文字列をキャプチャします。それ以外の場合は、の直後に続く"actor":
で囲まれた文字列をキャプチャします。"
"login:"
これまでに私が持っているもの:
zgrep -e '"type":"FollowEvent"' /path/to/dir/* | zgrep -o '"actor":(?!{)*' | cut -f2- -d: | cut -d',' -f1 > results_file.txt
編集: これは何zgrep
をするのでしょうか:
/path/to/dir 内のすべてのファイルにおいて、 を含むすべての行で"type":"FollowEvent"
、"actor:"
の後に続かないを検索します{
。次に、 の後:
と次の の前にあるすべてのものを取得します,
。結果を に格納しますresults_file.txt
。
表示データの編集:
grep されるファイル内の 1 行は次のようになります。
{"repo":{"url":"https://url","name":"/"},"type":"FollowEvent","public":true,"created_at":"2011-05-29","payload":{"target":{"gravatar_id":"73","id":64,"repos":35,"followers":58,"login":"username3"}},"actor":{"gravatar_id":"06","id":439,"url":"https://url","avatar_url":"https://.png","login":"username4"},"id":"14"}
または次のようになります:
{"repo":{"url":"https://url/","name":"/"},"type":"FollowEvent","public":true,"created_at":"2011-04-01","payload":{"target":{"gravatar_id":"40","repos":2,"followers":1,"login":"username2"},"actor":"username1","actor_gravatar":"de4"},"actor":{"gravatar_id":"de4","id":716,"url":"https://url","avatar_url":"https://.png","login":"username2"},"id":"12"}
答え1
login
以下にリストされているユーザー名は、target
次の方法で両方の JSON ドキュメントから取得できますjq
。
$ jq -r '.payload.target.login' file1.json
username3
同様に、login
以下もactor
得られます:
$ jq -r '.actor.login' file1.json
username4
出力を に条件付きで設定したい場合(でないtype
場合は何も生成しない場合):type
FollowEvent
jq -r 'select(.type == "FollowEvent") | .actor.login' file1.json