@steeldriver вам нужно сделать это ответом, поскольку это способ сделать это с помощью grep, странно выбранного инструмента для работы.
MelBurslan
1
grepне лучший инструмент для печати первой строки файла. Если вы просто имели в виду, что хотите напечатать первую соответствующую строку grep, или если у вас есть какое-то конкретное применение grep, сообщите нам, что это такое. Если бы у нас было больше контекста, возможно, мы могли бы дать ответ, который лучше помог бы вам и сообществу.
DKing
@MelBurslan В файле file.txt у меня есть три строки, например: Это новый файл. Вторая строка: имя файла newFile. Третья строка: я не создал новую строку. Итак, используя команду grep, как я могу напечатать только первую строку? Также Как какая команда поможет мне напечатать как первую, так и последнюю строку? Ребята, скажите, пожалуйста, команды для обоих вопросов?
Нитин Сантош,
Если какой-либо из существующих ответов решит вашу проблему, попробуйте принять его с помощью галочки. Спасибо!
Джефф Шаллер
Ответы:
38
Хотя это нестандартное применение grep, вы можете сделать это, используя
grep -m1 "" file.txt
Это работает, потому что пустое выражение соответствует чему-либо, в то время как -m1grep завершает работу после первого совпадения
-m NUM, --max-count=NUM
Stop reading a file after NUM matching lines.
+1 за то, что показал, что покрытый шоколадом банан здесь не так бесполезен, как я думал.
Камиль Мачоровски
4
Это может работать на некоторых системах, но это не переносимо:grep: unknown option -- m
Кусалананда
1
Обратите внимание на разницу между «первая строка» и «первая строка соответствует»
Чарльз
13
Это не то, что grepделает. Само название «grep» является аббревиатурой от « поиска в регулярном выражении глобально и печати», что и делает edкоманда g/re/p(для данного регулярного выражения re).
edинтерактивный линейный редактор 1969 года, но, тем не менее, он, скорее всего, установлен в вашей системе сегодня. Мы получили grepот ed, и это можно рассматривать как ярлык или псевдоним для конкретной функциональности ed, и sed, что «ручейки ed», т.е. (неинтерактивный) поток редактор.
Давайте использовать sedвместо этого:
$ sed -n '1p' file.txt
1pСтрока представляет собой миниатюрный sed«сценарий» , который печатает ( p) линия , соответствующая данному адресу ( 1первая строка). Кстати, команда редактирования 1p(не удивительно) будет делать то же самое в edредакторе.
-nПодавляет вывод ничего явно не напечатанной по сценарию, так что все , что мы получаем это первая строка файла file.txt.
В качестве альтернативы:
$ sed '1q' file.txt
Это печатает все строки файла, но выходит ( q) в строке 1 (после печати). Это в точности эквивалентно head -n 1 file.txt.
В стандарте POSIX говорится (обобщая), что head -n Nэто почти то же самое sed 'Nq', что «печатать каждую строку, но выходить в строке N». Причина headбыла включена в стандарт вообще из-за симметрии tail(и обратной совместимости с существующими реализациями Unix).
Это самый светлый ответ, первый ответ - странный взлом. Я знал, что было что-то странное, спасибо, что показали мне историю grep и ed. Все это имеет смысл сейчас.
Томас
6
Если в первой строке нет уникальной строки, вы не можете сделать это, используя только grep. head -n 1 file.txtбудет работать на своем месте.
Если вы хотите распечатать первую строку, только если она соответствует шаблону, то труба в grep
Еще одно нетрадиционное использование Grep - преобразование Шварца, которое проходит несколько циклов для нумерации строк, затем использует grep для поиска номера строки, а затем убирает номер строки обратно:
Я помещаю этот Ответ здесь в качестве примера идеи, что просто потому, что вы можете что-то делать в (grep или bash или ... и т.д.), не означает, что вы должны это делать - возможно, есть лучший инструмент для этой работы. sed ( sed 1qили sed -n 1p) и head ( head -n 1) являются более подходящими инструментами для печати первой строки из файла. Для печати последней строки файла у вас есть tail -n 1илиsed -n '$p', Мало того, что эти инструменты являются единственной командой (вместо 3+ в вышеуказанных функциях), они также намного понятнее для будущих читателей - возможно, для себя! - из сценариев, в которых они находятся. Хотя я не являюсь одним из (в настоящее время 3) отрицателей вашего вопроса, вполне вероятно, что ваша настойчивость в выборе произвольного инструмента для работы (без каких-либо вспомогательных причин) является причиной отрицательные голоса. Это крайне маловероятно , что система , которая имеет grepтакже не имеет head, tailи sed.
head -1 file.txt
будет работать?grep
не лучший инструмент для печати первой строки файла. Если вы просто имели в виду, что хотите напечатать первую соответствующую строкуgrep
, или если у вас есть какое-то конкретное применениеgrep
, сообщите нам, что это такое. Если бы у нас было больше контекста, возможно, мы могли бы дать ответ, который лучше помог бы вам и сообществу.Ответы:
Хотя это нестандартное применение grep, вы можете сделать это, используя
Это работает, потому что пустое выражение соответствует чему-либо, в то время как
-m1
grep завершает работу после первого совпаденияисточник
grep: unknown option -- m
Это не то, что
grep
делает. Само название «grep» является аббревиатурой от « поиска в регулярном выражении глобально и печати», что и делаетed
командаg/re/p
(для данного регулярного выраженияre
).ed
интерактивный линейный редактор 1969 года, но, тем не менее, он, скорее всего, установлен в вашей системе сегодня. Мы получилиgrep
отed
, и это можно рассматривать как ярлык или псевдоним для конкретной функциональностиed
, иsed
, что «ручейкиed
», т.е. (неинтерактивный) поток редактор.Давайте использовать
sed
вместо этого:1p
Строка представляет собой миниатюрныйsed
«сценарий» , который печатает (p
) линия , соответствующая данному адресу (1
первая строка). Кстати, команда редактирования1p
(не удивительно) будет делать то же самое вed
редакторе.-n
Подавляет вывод ничего явно не напечатанной по сценарию, так что все , что мы получаем это первая строка файлаfile.txt
.В качестве альтернативы:
Это печатает все строки файла, но выходит (
q
) в строке 1 (после печати). Это в точности эквивалентноhead -n 1 file.txt
.В стандарте POSIX говорится (обобщая), что
head -n N
это почти то же самоеsed 'Nq'
, что «печатать каждую строку, но выходить в строкеN
». Причинаhead
была включена в стандарт вообще из-за симметрииtail
(и обратной совместимости с существующими реализациями Unix).источник
Если в первой строке нет уникальной строки, вы не можете сделать это, используя только grep.
head -n 1 file.txt
будет работать на своем месте.Если вы хотите распечатать первую строку, только если она соответствует шаблону, то труба в grep
head -n 1 * | grep [pattern]
источник
Еще одно нетрадиционное использование Grep - преобразование Шварца, которое проходит несколько циклов для нумерации строк, затем использует grep для поиска номера строки, а затем убирает номер строки обратно:
Я помещаю этот Ответ здесь в качестве примера идеи, что просто потому, что вы можете что-то делать в (grep или bash или ... и т.д.), не означает, что вы должны это делать - возможно, есть лучший инструмент для этой работы. sed (
sed 1q
илиsed -n 1p
) и head (head -n 1
) являются более подходящими инструментами для печати первой строки из файла. Для печати последней строки файла у вас естьtail -n 1
илиsed -n '$p'
, Мало того, что эти инструменты являются единственной командой (вместо 3+ в вышеуказанных функциях), они также намного понятнее для будущих читателей - возможно, для себя! - из сценариев, в которых они находятся. Хотя я не являюсь одним из (в настоящее время 3) отрицателей вашего вопроса, вполне вероятно, что ваша настойчивость в выборе произвольного инструмента для работы (без каких-либо вспомогательных причин) является причиной отрицательные голоса. Это крайне маловероятно , что система , которая имеетgrep
также не имеетhead
,tail
иsed
.источник