Перейти к содержимому

Как вывести первые 10 строк linux

  • автор:

Как вывести первые 10 строк linux


Next: Экранный редактор vi Up: Работа с текстом Previous: Просмотр текста Contents Index

Простейший способ вывести текст — использование стандартного вывода. Это удобно для быстрого просмотра части текста, или для передачи ее другим инструментам командной строки.

Многие еще используют для вывода текстовых файлов утилиту cat, особенно, если файл небольшого размера. Чтобы вывести на экран все содержимое файла, используйте cat и укажите имя файла в качестве аргумента.

Используйте опцию `-v’ для cat, чтобы вывести символы, не отображаемые на печати, например, управляющие символы. При указанной опции cat выводит эти символы в нотации «с крышкой» , т.е. они представляются сочетанием `^’ и символа, соответствующего управляющему символу (например, символ звукового сигнала будет представлен как `^G’ ).

Чтобы вывести управляющие символы файла `translation’, введите:

$ cat -v translation | less [Enter]

Чтобы визуально отобразить конец строки в каждой строке, используйте опцию `-E’; она приведет к тому, что в конце каждой строки появится символ `$’ .

Полезной является опция `-T’, которая выводит все табуляции в виде `^I’ .

Опция `-A’ комбинирует все три вышеуказанные опции — как если бы Вы указали опции с помощью `-vET’.

Чтобы вывести только начало текстового файла, используйте команду head. По умолчанию она выводит на экран первые десять строк из своего ввода.

Чтобы вывести первые десять строк файла `placement-list’, введите:

$ head placement-list [Enter]

Вы можете указать требуемое число строк для вывода. Если Вы укажете больше строк, чем содержится в файле, head просто выведет весь текст.

Чтобы вывести первую строку файла `placement-list’, введите:

$ head -1 placement-list [Enter]

Чтобы вывести 66 строк от начала файла `placement-list’, введите:

$ head -66 placement-list [Enter]

Чтобы вывести определенное число символов, а не строк, укажите число символов для вывода через аргумент опции `-c’.

Чтобы вывести первый символ файла `placement-list’, введите:

$ head -c1 placement-list [Enter]

Утилита tail работает подобно head, но выводит последнюю часть своего ввода. Как и в head, по умолчанию выводятся десять строк.

Чтобы вывести последние десять строк файла `placement-list’, введите:

$ tail placement-list [Enter]

Чтобы вывести последние четырнадцать строк файла `placement-list’, введите:

$ tail -14 placement-list [Enter]

Иногда требуется просматривать конец файла непрерывно; это полезно для «растущих» файлов, записываемых другими процессами. Чтобы непрерывно просматривать конец файла, используйте tail с опцией `-f’. Нажмите Ctrl-c для прекращения просмотра.

Чтобы непрерывно просматривать конец файла `access_log’, введите:

$ tail -f access_log [Enter]

Чтобы вывести на экран определенную строку из файла, используйте утилиту sed. Укажите в кавычках номер нужной строки и сочетание `!d’. Вторым аргументом должно быть имя файла.

Чтобы вывести строку 47 из файла `placement-list’, введите:

$ sed ’47!d’ placement-list [Enter]

Чтобы вывести участок файла в несколько строк, укажите номера стартовой и конечной строки через запятую.

Чтобы вывести строки с 47 по 108 из файла `placement-list’, введите:

$ sed ‘47,108!d’ placement-list [Enter]

Вы можете также скомбинировать команды head и tail в конвейер, чтобы добиться нужного результата.

Чтобы вывести десятую строку файла `placement-list’, введите:

$ head placement-list tail -1 [Enter]|

Чтобы вывести пятую и четвертую строки с конца файла `placement-list’, введите:

$ tail -5 placement-list head -2 [Enter]|

Чтобы вывести 500-й символ файла `placement-list’, введите:

$ head -c500 placement-list tail -c1 [Enter]|

Чтобы вывести первый символ пятой строки файла `placement-list’, введите:

$ head -5 placement-list tail -1 | head -c1 [Enter]|

Вы можете использовать sed для выделения текста между строками определенного вида и вывода выделенного текста или всего текста, кроме выделенногог участка.Строки для поиска — это либо слова, либо регулярные выражения.

Для выделения определенного абзаца используйте опцию `-n’ с указанием строки `’/first/,/last/p», где first и last — границы выделения. Это полезно, например, для вывода отдельных глав или разделов текста, если Вы знаете способ его разделения.

Чтобы вывести текст из файла `book-draft’ между строками `Chapter 3′ и `Chapter 4′, введите:

$ sed -n ‘/Chapter 3/,/Chapter 4/p’ book-draft [Enter]

Чтобы вывести весь текст, кроме указанного участка, опустите опцию `-n’.

Чтобы вывести весь текст из файла `book-draft’, кроме текста между строками `Chapter 3′ и `Chapter 4′, введите:

$ sed ‘/Chapter 3/,/Chapter 4/p’ book-draft [Enter]

Alex Otwagin 2002-12-16

Как вывести первые 10 строк linux

Команда head позволяет задействовать одноименную утилиту для вывода нескольких первых строк из текстового файла или вывода другой утилиты. Если вы исполняете команду, которая выводит большой объем данных и при этом заинтересованы лишь в нескольких первых строках вывода, эта команда — именно то, что вам нужно.

Базовый синтаксис команды выглядит следующим образом:

$ head [параметры] [файлы]

Утилита head может выводить как начальные строки вывода другой утилиты (в этом случае имен файлов не указывается), так и начальные строки одного или нескольких текстовых файлов с указанными именами. В том случае, если выводятся начальные строки нескольких файлов, их имена упоминаются в выводе. Утилита поддерживает ряд полезных параметров, а именно, параметр -n, позволяющий задать количество выводимых строк (по умолчанию выводится 10 строк), параметр -c, позволяющий задать количество выводимых байтов, параметр -q, позволяющий не добавлять информацию об именах файлов в вывод с их начальными строками, параметр -v, позволяющий всегда выводить информацию об именах файлов, а также параметр -z, позволяющий выводить символы завершения строк вместо символов перехода на новые строки (это полезно для использования утилиты со стороны других утилит).

Примеры использования

Вывод первых десяти строк текстового файла

Для вывода первых десяти строк текстового файла достаточно использовать утилиту head без каких-либо параметров:

$ head 1342.txt
PRIDE AND PREJUDICE

It is a truth universally acknowledged, that a single man in possession

Очевидно, что утилита вывела первые 10 строк файла.

Вывод заданного количества строк текстового файла

Для вывода заданного количества строк текстового файла следует использовать параметр -n:

$ head -n 3 1342.txt
PRIDE AND PREJUDICE

Теперь утилита вывела лишь необходимые три строки.

Вывод заданного количества байтов файла

Для того, чтобы вывести заданное количество байтов вместо заданного количества строк, достаточно использовать параметр -c таким же образом, как ранее использованный параметр -n:

$ head -c 23 1342.txt
PRIDE AND PREJUDICE

В первые 23 байта вошла первая строка текстового файла с символом перехода на новую строку.

Обработка вывода других утилит

Для того, чтобы вывести лишь первые строки вывода другой утилиты, достаточно использовать простой конвейер командной оболочки и не указывать имен файлов:

$ cat 1342.txt | head -n 3
PRIDE AND PREJUDICE

Утилита cat читает все содержимое текстового файла, а утилита head выполняет роль фильтра, выводя лишь три первые строки этого содержимого.

Вывод первых строк нескольких файлов

$ head -n 3 1342.txt 74.txt
==> 1342.txt PRIDE AND PREJUDICE

==> 74.txt THE ADVENTURES OF TOM SAWYER

Теперь утилита добавляет в вывод имена текстовых файлов для того, чтобы не возникало путаницы; в остальном она работает точно так же.

head/tail — вывод первых/последних строк из файлов

Иногда требуется выводить не все результаты работы команды, а только несколько первых или несколько последних строк. Команда head выводит первые 10 строк из файла, а tail — последние 10 строк. По умолчанию обе команды выводят 10 строк текста, но это число можно изменить с помощью параметра -n:

[me@linuxbox ~]$ head -n 5 ls-output.txt

-rwxr-xr-x 1 root root 31316 2011-12-05 08:58 [

-rwxr-xr-x 1 root root 8240 2011-12-09 13:39 411toppm

-rwxr-xr-x 1 root root 111276 2011-11-26 14:27 a2p

-rwxr-xr-x 1 root root 25368 2010-10-06 20:16 a52dec

[me@linuxbox ~]$ tail -n 5 ls-output.txt

-rwxr-xr-x 1 root root 5234 2011-06-27 10:56 znew

-rwxr-xr-x 1 root root 691 2009-09-10 04:21 zonetab2pot.py

-rw-r—r— 1 root root 930 2011-11-01 12:23 zonetab2pot.pyc

-rw-r—r— 1 root root 930 2011-11-01 12:23 zonetab2pot.pyo

lrwxrwxrwx 1 root root 6 2012-01-31 05:22 zsoelim -> soelim

Их также можно использовать в конвейерах:

[me@linuxbox ~]$ ls /usr/bin | tail -n 5

Команда tail позволяет наблюдать, как изменяется содержимое файла в режиме реального времени. Эту ее особенность удобно использовать для наблюдения за появлением новых записей в файлах журналов. В следующем примере демонстрируется наблюдение за файлом messages в каталоге /var/log. В некоторых дистрибутивах Linux для этого требуется обладать привилегиями суперпользователя, поскольку файл /var/log/messages может содержать секретную информацию.

[me@linuxbox ~]$ tail -f /var/log/messages

Feb 8 13:40:05 twin4 dhclient: DHCPACK from 192.168.1.1

Feb 8 13:40:05 twin4 dhclient: bound to 192.168.1.4 — renewal in 1652 seconds.

Feb 8 13:55:32 twin4 mountd[3953]: /var/NFSv4/musicbox exported to both 192.168.1.0/24 and twin7.localdomain in 192.168.1.0/24,twin7.localdomain

Feb 8 14:07:37 twin4 dhclient: DHCPREQUEST on eth0 to 192.168.1.1 port 67

Feb 8 14:07:37 twin4 dhclient: DHCPACK from 192.168.1.1

Feb 8 14:07:37 twin4 dhclient: bound to 192.168.1.4 — renewal in 1771 seconds.

Feb 8 14:09:56 twin4 smartd[3468]: Device: /dev/hda, SMART Prefailure Attribute: 8 Seek_Time_Performance changed from 237 to 236

Feb 8 14:10:37 twin4 mountd[3953]: /var/NFSv4/musicbox exported to both 192.168.1.0/24 and twin7.localdomain in 192.168.1.0/24,twin7.localdomain

Feb 8 14:25:07 twin4 sshd(pam_unix)[29234]: session opened for user me by (uid=0)

Feb 8 14:25:36 twin4 su(pam_unix)[29279]: session opened for user root by me(uid=500)

При вызове с параметром -f команда tail продолжает следить за файлом и при добавлении в конец этого файла новых строк немедленно выводит их. Так продолжается до тех пор, пока пользователь не нажмет комбинацию клавиш CTRL-C.

Как вывести первые 10 строк linux

Наши партнеры

Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Операции с файлами и фильтрация

Chapter 5. Утилиты командной строки

Операции с файлами и фильтрация

Основная часть работы в командной строке ведётся с файлами. В этом разделе мы рассмотрим, как просматривать и фильтровать содержимое файлов, извлекать из файлов нужную информацию при помощи одной команды и сортировать их содержимое.

cat, tail, head, tee: Команды для вывода содержимого файлов

Эти команды имеют почти один и тот же синтаксис: имя_команды [опции] [файл(ы)], и могут быть использованы в каналах. Все они используются для вывода части файла согласно определенным критериям.

Утилита cat объединяет файлы и выводит результат на стандартный вывод. Это одна из наиболее широко используемых команд. Вы можете использовать:

# cat /var/log/mail/info

для вывода, например, содержимого файла с журналом почтового демона на стандартный вывод [14] . Команда cat имеет очень полезную опцию ( -n ), которая позволяет вам выводить номера строк.

Некоторые файлы, типа журналов демонов (если они запущены) обычно имеют довольно большой размер [15] и полный их вывод на экран будет не очень полезным. Часто вам нужно увидеть только несколько строк из файла. Для этого вы можете воспользоваться командой tail . Следующая команда выведет (по умолчанию) последние 10 строк из файла /var/log/mail/info :

# tail /var/log/mail/info

Вы можете использовать опцию -n для вывода последних N строк файла. Например, для вывода последних 2-х строк наберите:

# tail -n2 /var/log/mail/info

Команда head похожа на tail , но она выводит первые строки файла. Следующая команда выведет (по умолчанию) первые 10 строк файла /var/log/mail/info :

# head /var/log/mail/info

Как и в случае с tail вы можете использовать опцию -n для указания количества выводимых строк. Например, для вывода первых 2-х строк наберите:

# head -n2 /var/log/mail/info

Также вы можете использовать эти две команды совместно. Например, если вы хотите увидеть только строки 9 и 10, вы можете воспользоваться командой, в которой head выберет первые 10 строк из файла и передаст их по каналу в команду tail.

# head /var/log/mail/info | tail -n2

Затем вторая часть команды отберет последние 2 строки и выведет их на экран. Таким же способом вы можете выбрать 20-ю от конца файла строку:

# tail -n20 /var/log/mail/info |head -n1

В этом примере мы говорим команде tail выбрать последние 20 строк файла и передать их по каналу в head. Затем команда head выводит на экран первую строку из полученных данных.

Допустим, что результат последнего примера нам нужно одновременно вывести на экран и сохранить его в файл results.txt . В этом нам может поможет утилита tee . Ее синтаксис:

tee [опции] [файл]

Теперь мы можем изменить предыдущую команду следующим образом:

# tail -n20 /var/log/mail/info |head -n1|tee results.txt

Давайте рассмотрим еще один пример. Нам нужно выбрать последние 20 строк, сохранить их в файл results.txt , а на экран вывести только первую из них. Тогда мы должны ввести следующее:

# tail -n20 /var/log/mail/info |tee results.txt |head -n1

У команды tee есть полезная опция ( -a ), которая позволяет вам дописать данные в конец существующего файла.

Давайте вернемся назад к команде tail . Такие файлы как журналы обычно динамически изменяются, т.к. демон постоянно добавляет в них отчет о совершенных действиях или событиях. Поэтому, если вам нужно наблюдать за изменениями в лог-файле в режиме реального времени, тогда вам нужно воспользоваться преимуществами опции -f :

# tail -f /var/log/mail/info

В этом случае все изменения в файле /var/log/mail/info будут немедленно выводиться на экран. Использование команды tail с опцией -f весьма полезно, когда вам нужно знать, как работает ваша система. Например, наблюдая за файлом журнала /var/log/messages , вы сможете всегда получать обновленную информацию о системных сообщенях и различных демонах.

В следующем разделе мы рассмотрим, как можно использовать утилиту grep в качестве фильтра для отделения сообщений Postfix от сообщений других служб.

grep: Поиск строк в файлах

Ни имя команды, ни ее аббревиатура (“General Regular Expression Parser” — синтаксический анализатор общих регулярных выражений) не слишком интуитивны, но ее действие и ее использование довольно просты для понимания: grep выполняет поиск в одном или нескольких файлах по шаблону, заданному в качестве аргумента. Ее синтаксис:

grep [опции] [один или более файлов]

Если указано несколько файлов, в отображаемом результате их имена будут выводиться перед каждой найденной строкой. Для предотвращения вывода этих имен используйте опцию -h ; используйте опцию -l для вывода только имен файлов с найденными совпадениями. Шаблон — это регулярное выражение, хотя в большинстве случаев он состоит просто из одного слова. Наиболее часто используемые опции:

  • -i : поиск без учета регистра (т.е. игнорирование разницы между верхним и нижним регистром);
  • -v : обратный поиск. Вывод строк, которые не соответствуют шаблону;
  • -n : вывод номера строки для каждой из найденных строк;
  • -w : сообщает grep’у, что шаблон должен совпадать со всем словом.
# grep postfix /var/log/mail/info

Команда grep может быть использована в канале. Так мы можем получить такой же результат, что и в предыдущем примере, при помощи следующего:

# cat /var/log/mail/info | grep postfix

Если нам нужно найти все строки, не содержащие шаблона “postfix”, нам надо будет воспользоваться опцией -v :

# grep -v postfix /var/log/mail/info

Давайте предположим, что нам необходимо найти все сообщения об успешно отправленных письмах. В этом случае мы должны отфильтровать все строки, добавленные почтовым демоном в файл журнала (содержащие шаблон “postfix”), и они должны содержать сообщение об успешной отправке (“status=sent”):

# grep postfix /var/log/mail/info |grep status=sent

В этом случае команда grep использована дважды. Это разрешается, но не совсем красиво. Мы можем получить тот же результат при помощи утилиты fgrep . Сначала нам нужно создать файл, содержащий шаблоны, записанные в столбик. Такой файл может быть создан следующим образом (мы используем patterns.txt в качестве имени файла):

# echo -e 'status=sent\npostfix' >./patterns.txt

Затем мы вызываем следующую команду, в которой мы используем файл patterns.txt со списком шаблонов и утилиту fgrep вместо “двойного вызова” команды grep:

# fgrep -f ./patterns.txt /var/log/mail/info

Файл ./patterns.txt может содержать сколько угодно шаблонов. Каждый из них должен быть введен в виде одной строки. Например, для выборки сообщений о письмах, успешно отправленных на адрес peter@mandrakesoft.com , достаточно будет добавить адрес этого электронного ящика в наш файл ./patterns.txt , выполнив следующую команду:

# echo 'peter@mandrakesoft.com' >>./patterns.txt

Понятное дело, что вы можете комбиноровать команду grep с tail и head . Если нам нужно найти сообщения о предпоследнем электроном письме, отправленном на адрес peter@mandrakesoft.com , мы используем:

# fgrep -f ./patterns.txt /var/log/mail/info | tail -n2 | head -n1

Здесь мы применили описанный выше фильтр и отправили результат через канал в команды tail и head. Они выбрали из данных предпоследнее значение.

wc: Подсчёт элементов в файлах

Команда wc (Word Count — подсчёт слов) используется для подсчёта числа строк и слов в файлах. Она также полезна для подсчёта байтов, символов и длины самой длинной строки. Её синтаксис:

wc [опции] [файл(ы)]
  • -l : вывод количества новых строк;
  • -w : вывод количества слов;
  • -m : вывод общего количества символов;
  • -c : вывод количества байт;
  • -L : вывод длины самой длинной строки в заданном тексте.
$wc -l /etc/passwd

Если нам нужно узнать число CPU в нашей системе, мы пишем:

$grep "model name" /proc/cpuinfo |wc -l

В предыдущем разделе мы получили список сообщений об успешно отправленных письмах на адреса, перечисленные в нашем файле ./patterns.txt . Если нам нужно узнать количество таких сообщений, мы можем перенаправить наш отфильтрованный результат через канал в команду wc :

# fgrep -f ./patterns.txt /var/log/mail/info | wc -l

sort: Сортировка содержимого файла

Ниже представлен синтаксис этой можно утилиты для сортировки [16] :

sort [опции] [файл(ы)]

Давайте отсортируем часть файла /etc/passwd . Как видите сам по себе этот файл не отсортирован:

$ cat /etc/passwd

Если нам нужно отсортировать его по полю login , мы набираем:

$ sort /etc/passwd

По умолчанию команда sort сортирует информацию по первому полю в порядке возрастания (в нашем случае по полю login ). Если нам нужно отсортировать данные в порядке убывания, мы используем опцию -r :

$ sort -r /etc/passwd

Для каждого пользователья имеется свой собственный UID , записанный в файле /etc/passwd . Давайте отсортируем этот файл в порядке возрастания по полю UID :

$ sort /etc/passwd -t":" -k3 -n
  • -t»:» : сообщает sort ‘у, что разделителем полей является символ «:» ;
  • -k3 : означает, что сортировка должна быть выполнена по по третьему столбцу;
  • -n : сообщает, что выполняется сортировка числовых данных, а не буквенных.
$ sort /etc/passwd -t":" -k3 -n -r
  • -u : строгая сортировка: исключаются повторяющиеся поля сортировки;
  • -f : игнорирование регистра (строчные символы обрабатываются так же, как и прописные).
$ sort /etc/passwd -t":" -k3 -n |tail -n1

, где мы сортируем файл /etc/passwd в порядке возрастания по столбцу UID и прогоняем результат по каналу через команду tail , которая выводит первое значение из отсортированного списка.
[14] Некоторые примеры в этом разделе основаны на реальной работе с файлами журналов некоторых серверов (служб, демонов). Убедитесь, что у вас запущен syslogd (разрешает журналирование демонов), соответствующий демон (в нашем случае Postfix), и что вы в работаете под root ‘ом. И, естественно, вы всегда можете применять наши примеры к другим файлам. [15] Например, файл /var/log/mail/info содержит информацию обо всех отправленных письмах, сообщениях о выборке почты пользователями по протоколу POP и т.д. [16] Здесь мы только вкратце рассмотрим sort , потому что о её возможностях можно написать целую книгу.

Prev Up Next
Chapter 5. Утилиты командной строки Home find: Поиск файлов по определенным критериям

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *