Я пытаюсь найти все экземпляры "type":"FollowEvent"
, а затем в этих экземплярах, если за строкой "actor":
не следует {
, затем захватить строку, заключенную в "
, которая следует сразу после "actor":
.Иначе, захватите строку, заключенную в "
, которая идет сразу после "login:"
.
То, что у меня есть до сих пор:
zgrep -e '"type":"FollowEvent"' /path/to/dir/* | zgrep -o '"actor":(?!{)*' | cut -f2- -d: | cut -d',' -f1 > results_file.txt
Что это делает:
Длявсе файлы в / path / to / dir, для всех строк, которые содержат "type":"FollowEvent"
, найдите "actor:"
, за которым не следует {
.Затем возьмите все после :
и до следующего ,
.Поместите результаты в results_file.txt
.
Одна строка в файлах, которые были grep'd, может выглядеть так:
{"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"}
Что я хочу:
файл, содержащий только имена пользователей актеров.Вот, я хочу, в results_file.txt
:
username4
username1