поиск специализированных шаблонов с использованием grep в json-файле

Интересно, как я могу только grep «created_at»: те, которые следуют за}, и новую строку, как показано ниже:

"hashtags": [], "urls": [] }, "created_at": "Wed Oct 19 22:19:42 +0000 2016", "retweeted": false, "coordinates": null, "in_reply_to_user_id_str": null, "source": "<a href=\"http://tweetlogix.com\" rel=\"nofollow\">Tweetlogix</a>", "in_reply_to_status_id_str": null, "in_reply_to_screen_name": null, "in_reply_to_user_id": null, "place": null, "retweet_count": 0, "id_str": "788867246953201664" }, { "favorited": false, "contributors": null, "truncated": false, "text": "Reddit Exposes Hillary Clinton Staff Trying To Frame Assange As \u2018Pedo\u2019 https://t.co/KNj14p8QqN via @yournewswire", "possibly_sensitive": false, "is_quote_status": false, "in_reply_to_status_id": null, "user": { "follow_request_sent": false, "has_extended_profile": false, "profile_use_background_image": true, "time_zone": "Eastern Time (US & Canada)",

Сначала я использовал grep -wirnE 'Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' * > results_created_at, а затем использовал wc -l results_created_at, чтобы подсчитать количество твитов, созданных в этом конкретном временном диапазоне. Однако, оказывается, у нас могут быть изображения профиля или пользователи, которые также были созданы в этом диапазоне времени. Итак, я хотел бы знать, как искать только твиты, используя начальную команду grep, которую я имел?

Я просматривал многие из твитов в своих файлах и, кажется, во всех них:}, \ n (newlines) сопровождается «created_at»: а затем несколько строк после того, как у нас есть текст.

0
задан 18 January 2018 в 20:47

2 ответа

Добавление -z к вашим параметрам grep сделает grep обрабатывать новые строки как нулевые завершающие символы (\0) в отличие от отдельных строк, однако они не кажутся подходящими в регулярном выражении. Обходной путь для этого состоит в том, чтобы просто сопоставить все (.*) до конца вашего желаемого шаблона (в вашем случае «created_at»).

Затем вы можете добавить -o, чтобы иметь только выходной сигнал grep что фактически соответствует, в противном случае он выводит весь файл (так как теперь он по существу является одной гигантской линией). В качестве альтернативы, если единственная цель вывода в файл - позже wc -l, я вместо этого предлагаю вам использовать параметр -c grep, который будет печатать количество совпадений, а не совпадение.

Это переводит следующую команду:

grep -wirnEzc '},.*created_at' *

Расширяя это, чтобы включить ваш предыдущий шаблон, мы получаем:

grep -wirnEzc '},.*created_at":\s"Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' *
1
ответ дан 17 July 2018 в 22:57

Добавление -z к вашим параметрам grep сделает grep обрабатывать новые строки как нулевые завершающие символы (\0) в отличие от отдельных строк, однако они не кажутся подходящими в регулярном выражении. Обходной путь для этого состоит в том, чтобы просто сопоставить все (.*) до конца вашего желаемого шаблона (в вашем случае «created_at»).

Затем вы можете добавить -o, чтобы иметь только выходной сигнал grep что фактически соответствует, в противном случае он выводит весь файл (так как теперь он по существу является одной гигантской линией). В качестве альтернативы, если единственная цель вывода в файл - позже wc -l, я вместо этого предлагаю вам использовать параметр -c grep, который будет печатать количество совпадений, а не совпадение.

Это переводит следующую команду:

grep -wirnEzc '},.*created_at' *

Расширяя это, чтобы включить ваш предыдущий шаблон, мы получаем:

grep -wirnEzc '},.*created_at":\s"Wed Oct 19 2(1:[0-5][0-9]:[0-5][0-9]|2:([0-2][0-9]:[0-5][0-9]|30:00)) .* 2016' *
1
ответ дан 24 July 2018 в 13:32
  • 1
    но как вы связываете этот grep с другим? – Mona Jalal 16 January 2018 в 03:07
  • 2
    Мои извинения, я думал, что вы ищете замену своему оригинальному шаблону. Я обновил свой ответ, включив в него свой оригинальный шаблон. – Dude Random21 16 January 2018 в 20:49

Другие вопросы по тегам:

Похожие вопросы: