В вашем случае вы не хотите, чтобы компьютер работал усердно ... Но если это просто проблема читабельности человека, вы можете использовать его по lessканалу. Это заполнит экран, и вы можете нажать ENTER, чтобы увидеть больше строк и qвыйти:grep "SomeText" somefile.csv | less
SilentSteel
Ответы:
240
-mВариант, вероятно , что вы ищете:
grep -m 10 PATTERN [FILE]
От man grep:
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines. If the input is
standard input from a regular file, and NUM matching lines are
output, grep ensures that the standard input is positioned to
just after the last matching line before exiting, regardless of
the presence of trailing context lines. This enables a calling
process to resume a search.
Примечание: grep прекращает чтение файла после того, как найдено указанное количество совпадений!
Привет, он попробовал это, это в основном работает, но это не похоже на то, что grep «останавливается», думая, после того, как он находит первые 10 строк, похоже, что он продолжает думать и «используя мой процессор», и просто не печатать это правильно? Тханска
Jas
6
@Jason: похоже, это не так: grep занимает 0,005 с -m 1и 1,579 с без файла с 10 миллионами строк на моем ноутбуке.
Грегуар
3
Как tailправило, подключение работает, но оно не работает, особенно если вы разбираетесь с контекстом, например grep -A10 PATTERN, используете tailусеченный контекст, а не количество результатов. Этот ответ был тем, что я искал.
dimo414
1
-m 10это параметр, который имеет значение при подборе нескольких файлов! Трубопровод к заголовку не будет отображать совпадения в последующих файлах, если в первом файле слишком много совпадений. Спасибо !
Жюльен
1
ИМХО это следует пометить как принятый ответ, так как для этого не требуется другого инструмента. Кстати, эту опцию легче запомнить, зная, что это ярлык --max-count
Это не потребует поиска по всему файлу - оно остановится, когда будут найдены первые десять совпадающих строк. Еще одним преимуществом этого подхода является то, что он возвращает не более 10 строк, даже если вы используете grep с опцией -o.
Обратите внимание, что вы не можете использовать | headканал при использовании grepс -Aили -B(и, следовательно, не только для поиска результата ( -o), но и для контекста). В этом случае вам остается -mсказать grep количество строк с результатами, которые будут возвращены.
Аттила О.
17
Использование head на самом деле не останавливает работу grep через весь файл. Использование опции -m в grep делает.
LopSae
7
Awk подход:
awk '/pattern/{print; count++; if (count==10) exit}' file
less
каналу. Это заполнит экран, и вы можете нажать ENTER, чтобы увидеть больше строк иq
выйти:grep "SomeText" somefile.csv | less
Ответы:
-m
Вариант, вероятно , что вы ищете:От
man grep
:Примечание: grep прекращает чтение файла после того, как найдено указанное количество совпадений!
источник
-m 1
и 1,579 с без файла с 10 миллионами строк на моем ноутбуке.tail
правило, подключение работает, но оно не работает, особенно если вы разбираетесь с контекстом, напримерgrep -A10 PATTERN
, используетеtail
усеченный контекст, а не количество результатов. Этот ответ был тем, что я искал.-m 10
это параметр, который имеет значение при подборе нескольких файлов! Трубопровод к заголовку не будет отображать совпадения в последующих файлах, если в первом файле слишком много совпадений. Спасибо !Другой вариант - просто использовать голову :
Это не потребует поиска по всему файлу - оно остановится, когда будут найдены первые десять совпадающих строк. Еще одним преимуществом этого подхода является то, что он возвращает не более 10 строк, даже если вы используете grep с опцией -o.
Например, если файл содержит следующие строки:
Тогда это разница в выводе:
Использование
head
возвращает только 2 результата по желанию, тогда как -m2 возвращает 3.источник
| head
канал при использованииgrep
с-A
или-B
(и, следовательно, не только для поиска результата (-o
), но и для контекста). В этом случае вам остается-m
сказать grep количество строк с результатами, которые будут возвращены.Awk подход:
источник
Используя хвост:
источник
Для 2 вариантов использования:
grep -m 2
максимальное количество экземпляров на файл.git grep
который не берет-m
Хорошей альтернативой в этих сценариях является
grep | sed 2q
поиск первых двух вхождений во всех файлах. Документация sed: https://www.gnu.org/software/sed/manual/sed.htmlисточник