Ответ 1
Вы можете закрепить его, а затем grep:
tail -n +50000 myfile.txt | grep -in "time spent"
У меня есть большой текстовый файл, я хочу видеть строки, содержащие "time spent"
в этом текстовом файле, я использую:
grep -in "time spent" myfile.txt
Но меня интересуют только строки после 50000. На выходе я хочу видеть строки после 50000 и содержать "потраченное время". Есть ли способ сделать это?
Вы можете закрепить его, а затем grep:
tail -n +50000 myfile.txt | grep -in "time spent"
В качестве альтернативы вы можете использовать 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 до $
, что означает последнюю строку.
Ответ на grepping между любыми двумя номерами строк:
Using sed and grep:
sed -n '1,50000p' someFile | grep < your_string >
Вы можете использовать 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