Как я могу извлечь каждую строку между двумя словами из текста, используя grep, и сохранить ее в новый файл? - PullRequest
0 голосов
/ 29 марта 2019

У меня есть 2,2 ГБ .log-файл, из которого я хочу извлечь только определенную строку текста между двумя словами и сохранить ее в другом файле с помощью терминала с регулярным выражением на моем Mac.Эта строка часто появляется в файле, каждый с разной отметкой времени.Но я не могу понять, что команда делает именно это.Я хотел бы извлечь каждую строку, которая появляется между «Timestamp» и «& random».Ниже приведен пример строки:

Метка времени: 02 / март / 2018: 11: 46: 09 +0100 | Запрос: GET /track/video.mp4%20play/?id=10988&random

Я пробовал следующее:

grep -Po 'Timestamp \K.*(?= random)' video.log > outfile.txt

и:

sed -n '/Timestamp/,/random/p' video.log > outfile.txt

Я также пробовал другие вещи, но ничегоэто работает.

1 Ответ

0 голосов
/ 29 марта 2019

Вы можете использовать не жадное совпадение .*?, чтобы соответствовать до первого появления &random. Для TimeStamp S должен быть в верхнем регистре и вместо пробела перед случайным, вы должны использовать сам амперсанд.

Полагаю, вы не хотите записывать начальное двоеточие, чтобы начать матч с TimeStamp:

Ваша команда может выглядеть так:

grep -Po 'TimeStamp:\K.*?(?=&random)'  video.log > outfile.txt
...