Команда для нумерации строк linux

Обновлено: 02.07.2024

Программа nl — предназначена для решения простой задачи: она выполняет нумерацию строк. В простейшем случае использования nl напоминает команду cat -n:

]$ nl distros.txt | head

1 SUSE 10.2 12/07/2006

2 Fedora 10 11/25/2008

3 SUSE 11.0 06/19/2008

4 Ubuntu 8.04 04/24/2008

5 Fedora 8 11/08/2007

6 SUSE 10.3 10/04/2007

7 Ubuntu 6.10 10/26/2006

8 Fedora 7 05/31/2007

9 Ubuntu 7.10 10/18/2007

10 Ubuntu 7.04 04/19/2007

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

nl поддерживает идею логических страниц. Это дает возможность начинать нумерацию на каждой странице заново. С помощью параметров можно определить номер первой строки и протяженность нумерации, а также формат номеров. Логическую страницу можно разбить на заголовок, тело и нижний колонтитул. В каждом разделе нумерация может начинаться с начала и/или использоваться разный формат нумерации. Если программе nl передать несколько файлов, она будет интерпретировать их как один поток текста. Разделы в потоке выделяются добавлением в поток немного странной разметки, как показано в табл. 21.1.

Таблица 21.1. Разметка nl

Начало заголовка логической страницы

Начало тела логической страницы

Начало нижнего колонтитула логической страницы

Каждый элемент разметки из представленных в табл. 21.1 должен находиться в отдельной строке. После обработки элемента программа nl удалит его из потока текста.

В табл. 21.2 перечислены наиболее часто используемые параметры nl.

Таблица 21.2. Наиболее часто используемые параметры nl

Стиль нумерации тела, где аргумент стиль может иметь следующие значения:

a — нумеровать все строки;

t — нумеровать только непустые строки. Этот стиль применяется по умолчанию;

n — не нумеровать;

регулярное выражение — нумеровать только строки, соответствующие простому регулярному выражению

Стиль нумерации нижнего колонтитула. По умолчанию имеет значение n (нет нумерации)

Стиль нумерации заголовка. По умолчанию имеет значение n (нет нумерации)

Шаг приращения номеров на странице. По умолчанию имеет значение 1

Формат номеров, где аргумент формат может иметь следующие значения:

ln — с выравниванием по левому краю, без ведущих нулей;

rn — с выравниванием по правому краю, без ведущих нулей. Используется по умолчанию;

rz — с выравниванием по правому краю, с ведущими нулями

Не сбрасывать нумерацию в начале каждой логической страницы

Добавить указанную строку в конец каждого номера строки, чтобы отделить его от текста строки. По умолчанию используется один символ табуляции

Номер первой строки на каждой логической странице. По умолчанию имеет значение 1

Ширина поля номера строки. По умолчанию имеет значение 6

Следует отметить, что на практике нумеровать строки приходится довольно редко, но мы можем использовать nl, чтобы посмотреть, как объединить несколько инструментов для решения более сложных задач. Возьмем за основу наши наработки, созданные в предыдущей главе для получения отчета о дистрибутивах Linux. Поскольку далее мы будем использовать программу nl, включим в текст разметку, отделяющую заголовок/тело/нижний колонтитул. Для этого откройте в текстовом редакторе сценарий для sed из предыдущей главы, добавьте в него строки с разметкой, как показано ниже, и сохраните сценарий в файле с именем distros-nl.sed:

Linux Distributions Report

Name Ver. Released

Новый сценарий вставляет разметку логических страниц для nl и добавляет нижний колонтитул в конец отчета. Обратите внимание, что нам пришлось удвоить символы обратного слеша в разметке, потому что sed обычно интерпретирует их как экранирующие символы.

Теперь выведем улучшенный отчет, объединив sort, sed и nl:

]$ sort -k 1,1 -k 2n distros.txt | sed -f distros-nl.sed | nl

Linux Distributions Report

Name Ver. Released

1 Fedora 5 2006-03-20

2 Fedora 6 2006-10-24

3 Fedora 7 2007-05-31

4 Fedora 8 2007-11-08

7 SUSE 10.1 2006-05-11

8 SUSE 10.2 2006-12-07

9 SUSE 10.3 2007-10-04

11 Ubuntu 6.06 2006-06-01

12 Ubuntu 6.10 2006-10-26

13 Ubuntu 7.04 2007-04-19

14 Ubuntu 7.10 2007-10-18

Наш отчет является результатом объединения в конвейер нескольких команд. Сначала мы отсортировали список по названиям дистрибутивов и номерам версий (поля 1 и 2), затем обработали результат программой sed, добавив заголовок отчета (включая разметку логических страниц для nl) и нижний колонтитул. В заключение мы обработали результат с помощью программы nl, которая по умолчанию нумерует только строки в потоке текста, принадлежащие разделу с телом логической страницы.

Попробуйте повторить команду и поэкспериментировать с разными параметрами команды nl. Интересный результат, например, можно получить с помощью

Утилита не требует дополнительных установок, так как предварительно установленна в пакете coreutils в любой системе на основе Debian или Red Hat.

В этом уроке мы рассмотрим общие способы использования команды Linux cat, объясняя её особенности.

Команда Cat: Синтаксис

Прежде чем мы начнём углубляться в тему статьи, мы должны войти в VPS через SSH и быстро проверить основной синтаксис. Команда принимает имя файла в качестве аргумента вместе с опциями, уточняющими отдельные операции.

Чтобы найти все доступные опции, просто введите cat –help в терминале.

Создание Файла с Помощью Команды Cat

Файл создан, и вы можете начать заполнять его текстом. Если вы хотите добавить несколько строк, просто нажимайте Enter в конце каждой строки. Когда вы закончите, нажмите CTRL+D, чтобы выйти из файла.

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

Просмотр Содержимого Файла с Помощью Команды Cat

Это один из самых базовых примеров использования команды cat. Без каких-либо дополнительных опций команда прочитает содержимое файла и выведет его в консоли.

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

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

Редирект Контента с Помощью Команды Cat

Если файл назначения не существует, команда создаст его или перезапишет существующий с таким же именем.

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

Команда cat также позволяет объединять несколько файлов в один. По сути это работает так же, как и функция перенаправления выше, но с несколькими исходными файлами.

Как и ранее, приведенная выше команда создаст файл назначения, если он не существует, или перезапишет существующий файл с таким же именем.

Обозначение Конца Строки Командой Cat

С помощью команды cat также можно обозначить конец строки. Маркер конца строки — символ $. Чтобы реализовать эту функцию, используйте параметр -E:

Нумерация Строк с Помощью Команды Cat в Linux

Эта команда также позволяет отобразить содержимое файла с пронумерованными строками. Реализует эту функцию опция -n:

Отображение Непечатаемых Символов

Чтобы показать непечатаемые символы, добавьте к команде cat опцию -v, например:

Чтобы показать только символы табуляции, используйте параметр -T:

Табуляции будут отображаться как ^I.

Удаление Пустых Строк

Чтобы удалить пустые повторяющиеся строки и сэкономить место на дисплее, вы можете применить опцию -s. Но имейте в виду, что этот параметр удалит только повторяющиеся пустые строки, оставив одну пустую строку.

Нумерация Непустых Строк с Помощью Команды Cat в Linux

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

Отображение Файла в Обратном Порядке

Чтобы просмотреть содержимое файла в обратном порядке, начиная с последней строки и заканчивая первой, просто используйте команду tac (команду cat, написанную задом наперёд):

Выводы

Вот и всё. Теперь вы знаете, как работает команда cat в Linux и ознакомились с основными примерами её использования. Этого достаточно, чтобы начать применять её на практике. Если же вы хотите изучить эту утилиту более подробно, просто вызовите её справочную страницу с помощью команды man cat!

Мы надеемся, что эта статья помогла вам улучшить навыки работы с командной строкой Linux. Увидимся в следующем руководстве!

Ольга уже около пяти лет работает менеджером в сфере IT. Написание технических заданий и инструкций — одна из её главных обязанностей. Её хобби — узнавать что-то новое и создавать интересные и полезные статьи о современных технологиях, веб-разработке, языках программирования и многом другом.

Примеры команды cat в Linux

Применяем команду cat в Linux

Рассматриваемая сегодня команда доступна для всех дистрибутивов, основанных на ядре Линукс, и везде выглядит одинаковым образом. Из-за этого используемая сборка не имеет никакого значения. Сегодняшние примеры будут осуществляться на компьютере под управлением Ubuntu 18.04, а вам останется только ознакомиться с аргументами и принципом их действий.

Подготовительные действия

  1. Запустите файловый менеджер и перейдите в ту папку, где хранятся необходимые файлы.

Переход к папке через файловый менеджер в Linux

Переход к свойствам файла через файловый менеджер в Linux

Ознакомиться с путем к родительской папке в Linux

Запуск терминала через меню в операционной системе Linux

Переход к определенному месту через терминал в Linux

Таким методом осуществляется переход к определенной директории через стандартную консоль. Дальнейшие действия также будут производиться через эту папку.

Просмотр содержимого

Просмотр содержимого файла командой cat в Linux

Ознакомиться с содержимым файла через команду cat в Linux

Просмотреть содержимое сразу нескольких файлов через cat в Linux

Ознакомиться с содержимым нескольких файлов в Linux

Нумерация строк

Сейчас давайте затронем рассматриваемую команду с применением различных аргументов. Начать следует с нумерации строк, а за это отвечает -b .

Нумерация непустых строк в Linux через команду cat

Наглядный пример нумерации в Linux через команду cat

Нумерация строк нескольких файлов в Linux

Нумерация всех строк включая пусты

Удаление повторяющихся пустых строк

Случается так, что в одном документе присутствует множество пустых строк, возникших каким-либо образом. Вручную удалять их через редактор не всегда удобно, поэтому здесь тоже можно обратиться к команде cat, применив аргумент -s . Тогда строка приобретает вид cat -s testfile (доступно перечисление нескольких файлов).

Удалить пустые строки через команду cat в Linux

Добавление знака $

Знак $ в командной строке операционных систем Linux означает, что введенная далее команда будет выполнена от имени обычного пользователя, без предоставления рут-прав. Иногда бывает необходимо добавить такой знак в конец всех строк файла, и для этого следует применить аргумент -E . В итоге получается cat -E testfile (буква E должна быть обязательно прописана в верхнем регистре).

Добавить знак доллара в конце строк при использовании cat в Linux

Объединение нескольких файлов в один новый

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

    В консоли напишите cat testfile testfile1 > testfile2 (Количество названий перед > может быть неограниченным). После ввода нажмите на Enter.

Создание одного файла из нескольких через команду cat в Linux

Найти созданный файл командой cat в Linux

Ознакомиться содержимым созданного файла из нескольких в Linux

Намного реже используется еще несколько аргументов, но их обязательно следует упомянуть:

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

Кроме всего, в операционных системах на Линукс существует еще большое количество популярных и часто использующихся команд, узнайте о них подробнее в отдельном материале далее.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Искусство окна терминала на рабочем столе Linux

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

Команда кота

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

Когда-то, еще в эпоху коммутируемого модема, двоичные файлы часто разбивались на несколько файлов меньшего размера, чтобы облегчить загрузку. Вместо того, чтобы загружать один большой файл, вы возвращали каждый файл меньшего размера. Если какой-либо файл не удалось загрузить правильно, вы просто получите этот файл снова.

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

Широкополосные и оптоволоконные соединения привели к тому, что эта особая потребность исчезла — так же, как звуки визгливого набора — так что же осталось сделать cat сегодня? Довольно много на самом деле.

Отображение текстового файла

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

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

cat poem1.txt в окне терминала

Содержимое файла poem1.txt отображается в окне терминала.

содержимое poem1.txt в окне терминала

Это только половина знаменитого стихотворения. Где остальное? Здесь есть еще один файл с именем poem2.txt. Мы можем сделать cat список содержимого нескольких файлов с помощью одной команды. Все, что нам нужно сделать, это перечислить файлы по порядку в командной строке.

cat poem1.txt poem2.txt в окне терминала

Это выглядит лучше; у нас есть целое стихотворение сейчас.

содержимое poem1.txt и poem2.txt в окне терминала

Использование кошки с меньшими затратами

кошка poem1.txt poem2.txt | меньше в окне терминала

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

содержание poem1.txt и poem2.txt меньше в терминальном окне

Нумерация строк в файле

Мы можем указать номер строки в файле, как он отображается. Для этого мы используем опцию -n (число).

cat -n poem1.txt в окне терминала

Строки нумеруются так, как они отображаются в окне терминала.

содержимое poem1.txt с пронумерованными строками в окне терминала

Не нумеруйте пустые строки

Нам удалось пронумеровать строки с помощью cat , но подсчитываются и пустые строки между стихами. Чтобы иметь нумерацию строк текста, но игнорировать пустые строки, используйте опцию -b (number-nonblank).

cat -b poem1.txt в окне терминала

Теперь текстовые строки нумеруются, а пустые строки пропускаются.

пронумерованные строки пропускаются; l; ines в окне терминала

Не показывать несколько пустых строк

Если в файле есть разделы последовательных пустых строк, мы можем попросить cat игнорировать все, кроме одной пустой строки. Посмотри на этот файл.

содержимое файла с последовательными пустыми строками в окне терминала

Следующая команда заставит cat отображать только одну пустую строку из каждой группы пустых строк. Опция, которая нам нужна для этого, — опция -s (squeeze-blank).

cat -b poem1.txt в окне терминала

Это никак не влияет на содержимое файла; это только изменяет способ, которым cat отображает файл.

Несколько пустых строк игнорируются в окне терминала

Отображение вкладок

Если вы хотите узнать, вызваны ли пробелы пробелами или табуляцией, вы можете узнать, используя опцию -T (show-tabs).

cat -T poem1.txt в терминальной вдове

Вкладки представлены символами «^ I».

содержимое ofpoem1.txt с вкладками, отображаемыми в окне терминала

Отображение концов линий

Вы можете проверить наличие пробелов, используя опцию -E (show-end).

cat -T poem1.txt в окне терминала

Концы строк представлены символом «$».

содержимое poem1.txt с окончанием строки отображается в окне терминала

Объединение файлов

Не имеет смысла сохранять стихотворение в двух файлах, по одной половине в каждом. Давайте объединим их вместе и создадим новый файл со всем стихотворением.

cat poem1.txt poem2.txt> jabberwocky.txt в окне терминала

давайте используем cat чтобы проверить наш новый файл:

кот jabberwocky.txt в окне терминала

Наш новый файл содержит содержимое двух других файлов.

содержимое jabberwocky.tx в окне терминала

Добавление текста в существующий файл

Это лучше, но на самом деле это не все стихотворение. Последний стих отсутствует. Последний стих в Jabberwocky такой же, как первый стих.

Если у нас есть первый стих в файле, мы можем добавить его в конец файла jabberwocky.txt, и у нас будет полное стихотворение.

В этой следующей команде мы должны использовать >> , а не просто > . Если мы используем один > мы перезапишем jabberwocky.txt. Мы не хотим этого делать. Мы хотим добавить текст в конец.

cat first_verse.txt >> jabberwocky.txt в окне терминала

Давайте проверим содержимое файла jabberwocky.txt:

кот jabberwocky.txt в окне терминала

И наконец, все части стихотворения вместе.

содержимое jabberwocky.txt в окне терминала

Перенаправление стандартного ввода

cat> my_poem.txt в окне терминала

Мы можем начать печатать, как только мы введем команду. Мы нажимаем Ctrl + D, когда мы закончим. Затем мы можем проверить содержимое нового файла с помощью:

Низкокачественная собачка в оконечном окне

Этот звук похож на далекую турбину, вероятно, Льюис Кэрролл вращается в могиле на высокой скорости.

Tac Command

tac похож на cat , но перечисляет содержимое файлов в обратном порядке .

Давайте посмотрим, что:

tac my_poem.txt в окне терминала

И файл отображается в окне терминала в обратном порядке. В этом случае это не влияет на его литературные достоинства.

my_poem.txt перечислен в обратном порядке в окне терминала

Использование TAC с STDIN

Использование tac без имени файла приведет к тому, что он будет работать с вводом с клавиатуры. Нажатие Ctrl + D остановит фазу ввода, и tac отобразит в обратном порядке все, что вы ввели.

TAC работает с STDIN в окне терминала

При нажатии Ctrl + D ввод меняется на противоположный и отображается в окне терминала.

вывод из TAC с использованием стандартного ввода в окне терминала

Использование TAC с файлами журналов

Помимо низкокачественных приемов, может ли что-нибудь сделать полезное? Да, оно может. Многие файлы журнала добавляют свои новейшие записи внизу файла. Используя tac (и, нелогично, head ), мы можем вытолкнуть последнюю запись в окно терминала.

Мы используем tac чтобы вывести файл системного журнала в обратном порядке и head его в head . Говоря head печатать только первую полученную строку (что благодаря tac является последней строкой в ​​файле), мы видим последнюю запись в файле системного журнала.

tac / var / log / syslog | голова -1 в окне терминала

head печатает последнюю запись из файла системного журнала и затем завершает работу.

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

последняя запись из системного журнала в окне терминала

Использование TAC с текстовыми записями

Последний трюк, у которого есть рукава, — красота.

Обычно tac работает с текстовыми файлами, проходя через них построчно, снизу вверх. Строка — это последовательность символов, оканчивающаяся символом новой строки. Но мы можем сказать tac для работы с другими разделителями. Это позволяет нам рассматривать «порции» данных в текстовом файле как записи данных.

Допустим, у нас есть файл журнала какой-то программы, который нам нужно просмотреть или проанализировать. Давайте посмотрим на его формат с less .

меньше лог файла в окне терминала

Как мы видим, в файле есть повторяющийся формат. Существуют последовательности из трех строк шестнадцатеричных значений. Каждый набор из трех шестнадцатеричных строк имеет строку метки, которая начинается с «= SEQ», после чего следует последовательность цифр.

верхняя часть лог-файла в окне терминала

Если прокрутить до конца файла, мы увидим, что этих записей много. Финальный номер 865.

нижняя часть лог-файла в окне терминала

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

Отметим, что последние три строки в файле начинаются с шестнадцатеричных значений 93, E7 и B8 в указанном порядке.

Давайте использовать tac чтобы перевернуть файл. Это очень длинный файл, поэтому мы добавим less .

tac logfile.dat | меньше в окне терминала

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

обратный лог файл меньше в окне терминала

Ранее мы отмечали, что последние три строки в файле начинаются с шестнадцатеричных значений 93, E7 и B8 в указанном порядке. Порядок этих строк был обратным. Кроме того, строки «= SEQ» теперь находятся ниже каждого набора из трех шестнадцатеричных строк.

tac -b -r -s ^ = SEQ. + 3 + * $ logfile.dat | меньше в окне терминала

Давайте разберемся с этим.

Опция -s (разделитель) сообщает tac что мы хотим использовать в качестве разделителя между нашими записями. Он говорит tac не использовать свой обычный символ новой строки, а вместо этого использовать наш разделитель.

Опция -r (regex) указывает tac обрабатывать строку-разделитель как регулярное выражение .

Опция -b (before) заставляет tac перечислять разделитель перед каждой записью, а не после нее (что является обычной позицией ее разделителя по умолчанию, символа новой строки).

Строка -s (разделитель) ^=SEQ.+8+*$ расшифровывается следующим образом:

Символ ^ обозначает начало строки. Далее следует =SEQ.+2+*$ . Это инструктирует tac искать каждое вхождение «= SEQ» в начале строки, за которой следует любая последовательность цифр (обозначенная 2 ), а затем любой другой набор символов (обозначенный *$ ).

Как обычно, мы делаем всё less .

обратный лог-файл с правильно сформированными записями данных

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

Мы можем проверить это просто. Первое значение первых трех шестнадцатеричных строк (которые были последними тремя строками перед обращением файла) соответствуют значениям, которые мы взяли ранее: 93, E7 и B8, в указанном порядке.

Это просто хитрость для однострочных окон терминала.

У всего есть цель

В мире Linux даже самые простые на вид команды и утилиты могут обладать удивительными и мощными свойствами.

Философия проектирования простых утилит, которые хорошо выполняют одну задачу и легко взаимодействуют с другими утилитами, породила некоторые странные маленькие команды, такие как tac . На первый взгляд, это немного странно. Но когда вы вглядываетесь под поверхность, появляется неожиданная сила, которую вы можете использовать в своих интересах.

Или, как говорит другая философия: «Не презирай змею за то, что у нее нет рогов, ибо кто скажет, что она не станет драконом?»

Читайте также: