Подтвердить что ты не робот

Как grep строка после указанного номера строки?

У меня есть большой текстовый файл, я хочу видеть строки, содержащие "time spent" в этом текстовом файле, я использую:

grep -in "time spent" myfile.txt

Но меня интересуют только строки после 50000. На выходе я хочу видеть строки после 50000 и содержать "потраченное время". Есть ли способ сделать это?

4b9b3361

Ответ 1

Вы можете закрепить его, а затем grep:

tail -n +50000 myfile.txt | grep -in "time spent"

Ответ 2

В качестве альтернативы вы можете использовать sed. sed можно использовать для имитации grep следующим образом:

sed -n 's/pattern/&/p'

По умолчанию sed печатает каждую строку, даже если не происходит замещения. Комбинации -n и /p позволяют sed печатать только строки, в которых произошла замена. Наконец, заменим pattern на &, что означает замену pattern само по себе. Результат: мы просто подражали grep.

Теперь sed может принимать ряд строк, на которые нужно действовать. В вашем случае:

sed -n '50000,$s/time spent/&/p' myfile.txt

Формат для указания диапазона следующий: start,end Мы просто рекомендуем sed работать с строки 50000 до $, что означает последнюю строку.

Ответ 3

Ответ на grepping между любыми двумя номерами строк:

Using sed and grep:

sed -n '1,50000p' someFile | grep < your_string >

Ответ 4

Вы можете использовать head + grep и сгруппировать команды с помощью {...}, чтобы они имели один и тот же ввод:

{ head -n 50000 >/dev/null; grep -i PATTERN; } < infile

head не потребляет весь вход, он получает только первые 50000 строк и отбрасывает их на /dev/null; остальные строки обрабатываются grep.
Если вам нужны номера строк, добавленные (например, с помощью grep -in), вы можете использовать awk:

awk 'NR>50000 && tolower($0)~/PATTERN/{print NR ": " $0}' infile