Греп из строки в строку

У меня есть файл с преследуемыми тысячами строк. Мне нужно grep от линии к другой линии и включить все между этими линиями

т. е. линии с 1 Wed Nov 25 23:08:01 GMT 2015 до Wed Nov 25 23:59:24 GMT 2015

 [...] abc abc abc Wed Nov 25 23:08:01 GMT 2015 def def def def ... (1000 lines with def) Wed Nov 25 23:59:24 GMT 2015 xyz xyz xyz [...] 

Можете ли вы предложить, что такое правильное выражение grep?

2 Solutions collect form web for “Греп из строки в строку”

Комбинация sed и grep должна делать трюк. Что-то вроде этого:

 sed '1,/Wed Nov 25 23:08:01 GMT 2015/d;/Wed Nov 25 23:59:24 GMT 2015/,$d' < file.txt | grep <yourstring> 

Обратите внимание, что этот пример не будет содержать строки, соответствующие датам, только все между ними.

Я не могу предложить выражение grep , потому что это не то, что означает grep .

Я бы предложил вместо этого использовать perl и оператор диапазона:

 #!/usr/bin/env perl use strict; use warnings; while ( <> ) { print if m/Wed Nov 25 23:08:01 GMT 2015/ .. /Wed Nov 25 23:59:24 GMT 2015/; } 

Который, если отформатирован как один вкладыш, становится:

 perl -ne 'print if m/Wed Nov 25 23:08:01 GMT 2015/ .. /Wed Nov 25 23:59:24 GMT 2015/' 

Примечание. Это текстовое сопоставление, а не числовое (как в случае с регулярным выражением). Можно было бы преобразовать эти даты и использовать время.

Вы можете сделать это численно следующим образом:

 #!/usr/bin/env perl use strict; use warnings; use Time::Piece; my $start = Time::Piece->strptime( 'Nov 25 23:00:00 GMT 2015', '%b %d %H:%M:%S GMT %Y' ); my $end = Time::Piece->strptime( 'Nov 25 23:59:00 GMT 2015', '%b %d %H:%M:%S GMT %Y' ); my $last_timestamp; while ( my $line = <DATA> ) { chomp($line); my $timestamp = eval { Time::Piece->strptime( $line, '%a %b %d %H:%M:%S GMT %Y' ) }; $timestamp //= $last_timestamp; if ( $timestamp > $start and $timestamp < $end ) { print $line,"\n"; } $last_timestamp = $timestamp; } __DATA__ [...] abc abc abc Wed Nov 25 23:08:01 GMT 2015 def def def def ... (1000 lines with def) Wed Nov 25 23:59:24 GMT 2015 xyz xyz xyz [...] 

(Примечание. Даты не строко соответствуют вашему вводу – мы разбираем их на числовые значения и проверяем в пределах диапазона).

  • введите число с нулями
  • Найти команду, которая не работает в сценарии оболочки
  • Как найти строки, содержащие строку, а затем напечатать эти конкретные строки и что-то еще
  • Как написать скрипт bash, который отправляет графическое уведомление всем X-дисплеям пользователей?
  • Удалите совпадающую строку и еще несколько из файла
  • аннотировать файл «include» для grep с комментариями?
  • Как запустить grep с несколькими шаблонами AND?
  • grep, чтобы найти экземпляры «Foo», где «Bar» не отображается в пределах 10 строк
  • Как фильтровать сообщение об успешном выполнении при сканировании порта nc
  • Найти шаблон из одного файла, указанного в другом
  • Копировать только Конкретный текст файла в другой
  • Linux и Unix - лучшая ОС в мире.