Если он может быть где угодно в строке, и все может быть между ними, я думаю,
grep -wirn 'Wed Oct 19 .* 2016' *
должен получить его ...
Если вам нужны только имена файлов , используйте -l
grep -wirl 'Wed Oct 19 .* 2016' *
Вероятно, правильно разобрать этот файл с помощью grep специально для чего-то такого простого, но использование парсера JSON, как упоминалось в ответе Дэвида Фёрстера, - это правильный путь (то есть, скорее всего, он будет более надежным, особенно если вам нужно что-то сделать сложным).
Если он может быть где угодно в строке, и все может быть между ними, я думаю,
grep -wirn 'Wed Oct 19 .* 2016' *
должен получить его ...
Если вам нужны только имена файлов , используйте -l
grep -wirl 'Wed Oct 19 .* 2016' *
Вероятно, правильно разобрать этот файл с помощью grep специально для чего-то такого простого, но использование парсера JSON, как упоминалось в ответе Дэвида Фёрстера, - это правильный путь (то есть, скорее всего, он будет более надежным, особенно если вам нужно что-то сделать сложным).
Если он может быть где угодно в строке, и все может быть между ними, я думаю,
grep -wirn 'Wed Oct 19 .* 2016' *
должен получить его ...
Если вам нужны только имена файлов , используйте -l
grep -wirl 'Wed Oct 19 .* 2016' *
Вероятно, правильно разобрать этот файл с помощью grep специально для чего-то такого простого, но использование парсера JSON, как упоминалось в ответе Дэвида Фёрстера, - это правильный путь (т. е. он, вероятно, будет более надежным, особенно если вам нужно что-либо сделать сложным).
Поскольку вы работаете над данными JSON, я бы использовал фактический парсер JSON:
LC_TIME=POSIX jq \
--argjson year 2016 --argjson month 10 --argjson day 19 \
--arg timefmt '%a %b %d %T %z %Y' \
'.. | .created_at? | select(.) | strptime($timefmt) | select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) | strftime($timefmt)' \
twitter.json
--arg и --argjson задал именованные переменные, используемые в этом скрипте jq. .. возвращает все рекурсивно вложенные объекты. .created_at? возвращает значение записи с ключом created_at, если доступно, или null в противном случае. select(.) возвращает только значения, которые являются «истиной-y» в ECMA Script, который включает непустые строки, но не null. strptime($timefmt) анализирует строку даты-времени в соответствии с strptime(3) и возвращает кортеж «с разбивкой» значений даты и времени. select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) возвращает только значения, для которых данное выражение оценивается как истинное, в этом случае значения переменных $year, $month и $day соответствуют их соответствующим записям кортежей даты и времени. strftime($timefmt) возвращает кортеж даты и времени, отформатированный как строка в соответствии с strftime(3) Для этого требуется jq v1.5 или новее, доступное в репозиториях Ubuntu Xenial (или позже) в одноименном пакете.
Этот grep должен иметь возможность извлекать нужные строки:
grep -E ".*Wed Oct 19.*2016$" reg.txt
Искать файлы и выводить только имя файла:
grep -Erl ".*Wed Oct 19.*2016$" /path/to/folders/to/search
Поскольку вы работаете над данными JSON, я бы использовал фактический парсер JSON:
LC_TIME=POSIX jq \
--argjson year 2016 --argjson month 10 --argjson day 19 \
--arg timefmt '%a %b %d %T %z %Y' \
'.. | .created_at? | select(.) | strptime($timefmt) | select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) | strftime($timefmt)' \
twitter.json
--arg и --argjson задал именованные переменные, используемые в этом скрипте jq. .. возвращает все рекурсивно вложенные объекты. .created_at? возвращает значение записи с ключом created_at, если доступно, или null в противном случае. select(.) возвращает только значения, которые являются «истиной-y» в ECMA Script, который включает непустые строки, но не null. strptime($timefmt) анализирует строку даты-времени в соответствии с strptime(3) и возвращает кортеж «с разбивкой» значений даты и времени. select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) возвращает только значения, для которых данное выражение оценивается как истинное, в этом случае значения переменных $year, $month и $day соответствуют их соответствующим записям кортежей даты и времени. strftime($timefmt) возвращает кортеж даты и времени, отформатированный как строка в соответствии с strftime(3) Для этого требуется jq v1.5 или новее, доступное в репозиториях Ubuntu Xenial (или позже) в одноименном пакете.
Этот grep должен иметь возможность извлекать нужные строки:
grep -E ".*Wed Oct 19.*2016$" reg.txt
Искать файлы и выводить только имя файла:
grep -Erl ".*Wed Oct 19.*2016$" /path/to/folders/to/search
Поскольку вы работаете над данными JSON, я бы использовал фактический парсер JSON:
LC_TIME=POSIX jq \
--argjson year 2016 --argjson month 10 --argjson day 19 \
--arg timefmt '%a %b %d %T %z %Y' \
'.. | .created_at? | select(.) | strptime($timefmt) | select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) | strftime($timefmt)' \
twitter.json
--arg и --argjson задал именованные переменные, используемые в этом скрипте jq. .. возвращает все рекурсивно вложенные объекты. .created_at? возвращает значение записи с ключом created_at, если доступно, или null в противном случае. select(.) возвращает только значения, которые являются «истиной-y» в ECMA Script, который включает непустые строки, но не null. strptime($timefmt) анализирует строку даты-времени в соответствии с strptime(3) и возвращает кортеж «с разбивкой» значений даты и времени. select(.[0] == $year and .[1] + 1 == $month and .[2] == $day) возвращает только значения, для которых данное выражение оценивается как истинное, в этом случае значения переменных $year, $month и $day соответствуют их соответствующим записям кортежей даты и времени. strftime($timefmt) возвращает кортеж даты и времени, отформатированный как строка в соответствии с strftime(3) Для этого требуется jq v1.5 или новее, доступное в репозиториях Ubuntu Xenial (или позже) в одноименном пакете.
Этот grep должен иметь возможность извлекать нужные строки:
grep -E ".*Wed Oct 19.*2016$" reg.txt
Искать файлы и выводить только имя файла:
grep -Erl ".*Wed Oct 19.*2016$" /path/to/folders/to/search