Команда для нумерации строк linux
Программа 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
Рассматриваемая сегодня команда доступна для всех дистрибутивов, основанных на ядре Линукс, и везде выглядит одинаковым образом. Из-за этого используемая сборка не имеет никакого значения. Сегодняшние примеры будут осуществляться на компьютере под управлением Ubuntu 18.04, а вам останется только ознакомиться с аргументами и принципом их действий.
Подготовительные действия
- Запустите файловый менеджер и перейдите в ту папку, где хранятся необходимые файлы.
Таким методом осуществляется переход к определенной директории через стандартную консоль. Дальнейшие действия также будут производиться через эту папку.
Просмотр содержимого
Нумерация строк
Сейчас давайте затронем рассматриваемую команду с применением различных аргументов. Начать следует с нумерации строк, а за это отвечает -b .
Удаление повторяющихся пустых строк
Случается так, что в одном документе присутствует множество пустых строк, возникших каким-либо образом. Вручную удалять их через редактор не всегда удобно, поэтому здесь тоже можно обратиться к команде cat, применив аргумент -s . Тогда строка приобретает вид cat -s testfile (доступно перечисление нескольких файлов).
Добавление знака $
Знак $ в командной строке операционных систем Linux означает, что введенная далее команда будет выполнена от имени обычного пользователя, без предоставления рут-прав. Иногда бывает необходимо добавить такой знак в конец всех строк файла, и для этого следует применить аргумент -E . В итоге получается cat -E testfile (буква E должна быть обязательно прописана в верхнем регистре).
Объединение нескольких файлов в один новый
Cat позволяет достаточно быстро и легко объединить несколько объектов в один новый, который будет сохранен в той же папке, откуда и осуществляются все действия. Вам достаточно выполнить следующее:
-
В консоли напишите cat testfile testfile1 > testfile2 (Количество названий перед > может быть неограниченным). После ввода нажмите на Enter.
Намного реже используется еще несколько аргументов, но их обязательно следует упомянуть:
Вы были ознакомлены с процедурой редактирования документов, которая может пригодиться для объединения обычного текста или конфигурационных файлов. Однако если вы заинтересованы в создании новых объектов, советуем обратиться к другой нашей статье по следующей ссылке.
Кроме всего, в операционных системах на Линукс существует еще большое количество популярных и часто использующихся команд, узнайте о них подробнее в отдельном материале далее.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Команды cat и tac отображают содержимое текстовых файлов, но это больше, чем кажется на первый взгляд. Погрузитесь немного глубже и изучите некоторые полезные приемы командной строки Linux.
Команда кота
cat используется для проверки содержимого текстовых файлов и объединения частей файлов в один большой файл.
Когда-то, еще в эпоху коммутируемого модема, двоичные файлы часто разбивались на несколько файлов меньшего размера, чтобы облегчить загрузку. Вместо того, чтобы загружать один большой файл, вы возвращали каждый файл меньшего размера. Если какой-либо файл не удалось загрузить правильно, вы просто получите этот файл снова.
Конечно, тогда вам нужен был способ восстановить коллекцию небольших файлов обратно в один рабочий двоичный файл. Этот процесс был назван объединением. И вот откуда пришел cat и откуда он получил свое имя.
Широкополосные и оптоволоконные соединения привели к тому, что эта особая потребность исчезла — так же, как звуки визгливого набора — так что же осталось сделать cat сегодня? Довольно много на самом деле.
Отображение текстового файла
Чтобы cat список содержимого текстового файла в окно терминала, используйте следующую команду.
Убедитесь, что файл является текстовым файлом. Если вы попытаетесь отобразить содержимое двоичного файла в окне терминала, результаты будут непредсказуемыми. Вы могли бы закончить с заблокированной терминальной сессией или хуже.
Содержимое файла poem1.txt отображается в окне терминала.
Это только половина знаменитого стихотворения. Где остальное? Здесь есть еще один файл с именем poem2.txt. Мы можем сделать cat список содержимого нескольких файлов с помощью одной команды. Все, что нам нужно сделать, это перечислить файлы по порядку в командной строке.
Это выглядит лучше; у нас есть целое стихотворение сейчас.
Использование кошки с меньшими затратами
Теперь мы можем перемещаться вперед и назад по тексту в одном потоке, даже если он содержится в двух отдельных текстовых файлах.
Нумерация строк в файле
Мы можем указать номер строки в файле, как он отображается. Для этого мы используем опцию -n (число).
Строки нумеруются так, как они отображаются в окне терминала.
Не нумеруйте пустые строки
Нам удалось пронумеровать строки с помощью cat , но подсчитываются и пустые строки между стихами. Чтобы иметь нумерацию строк текста, но игнорировать пустые строки, используйте опцию -b (number-nonblank).
Теперь текстовые строки нумеруются, а пустые строки пропускаются.
Не показывать несколько пустых строк
Если в файле есть разделы последовательных пустых строк, мы можем попросить cat игнорировать все, кроме одной пустой строки. Посмотри на этот файл.
Следующая команда заставит cat отображать только одну пустую строку из каждой группы пустых строк. Опция, которая нам нужна для этого, — опция -s (squeeze-blank).
Это никак не влияет на содержимое файла; это только изменяет способ, которым cat отображает файл.
Отображение вкладок
Если вы хотите узнать, вызваны ли пробелы пробелами или табуляцией, вы можете узнать, используя опцию -T (show-tabs).
Вкладки представлены символами «^ I».
Отображение концов линий
Вы можете проверить наличие пробелов, используя опцию -E (show-end).
Концы строк представлены символом «$».
Объединение файлов
Не имеет смысла сохранять стихотворение в двух файлах, по одной половине в каждом. Давайте объединим их вместе и создадим новый файл со всем стихотворением.
давайте используем cat чтобы проверить наш новый файл:
Наш новый файл содержит содержимое двух других файлов.
Добавление текста в существующий файл
Это лучше, но на самом деле это не все стихотворение. Последний стих отсутствует. Последний стих в Jabberwocky такой же, как первый стих.
Если у нас есть первый стих в файле, мы можем добавить его в конец файла jabberwocky.txt, и у нас будет полное стихотворение.
В этой следующей команде мы должны использовать >> , а не просто > . Если мы используем один > мы перезапишем jabberwocky.txt. Мы не хотим этого делать. Мы хотим добавить текст в конец.
Давайте проверим содержимое файла jabberwocky.txt:
И наконец, все части стихотворения вместе.
Перенаправление стандартного ввода
Мы можем начать печатать, как только мы введем команду. Мы нажимаем Ctrl + D, когда мы закончим. Затем мы можем проверить содержимое нового файла с помощью:
Этот звук похож на далекую турбину, вероятно, Льюис Кэрролл вращается в могиле на высокой скорости.
Tac Command
tac похож на cat , но перечисляет содержимое файлов в обратном порядке .
Давайте посмотрим, что:
И файл отображается в окне терминала в обратном порядке. В этом случае это не влияет на его литературные достоинства.
Использование TAC с STDIN
Использование tac без имени файла приведет к тому, что он будет работать с вводом с клавиатуры. Нажатие Ctrl + D остановит фазу ввода, и tac отобразит в обратном порядке все, что вы ввели.
При нажатии Ctrl + D ввод меняется на противоположный и отображается в окне терминала.
Использование TAC с файлами журналов
Помимо низкокачественных приемов, может ли что-нибудь сделать полезное? Да, оно может. Многие файлы журнала добавляют свои новейшие записи внизу файла. Используя tac (и, нелогично, head ), мы можем вытолкнуть последнюю запись в окно терминала.
Мы используем tac чтобы вывести файл системного журнала в обратном порядке и head его в head . Говоря head печатать только первую полученную строку (что благодаря tac является последней строкой в файле), мы видим последнюю запись в файле системного журнала.
head печатает последнюю запись из файла системного журнала и затем завершает работу.
Обратите внимание, что head печатает только одну строку — как мы и просили — но строка настолько длинная, что оборачивается дважды. Вот почему это выглядит как три строки вывода в окне терминала.
Использование TAC с текстовыми записями
Последний трюк, у которого есть рукава, — красота.
Обычно tac работает с текстовыми файлами, проходя через них построчно, снизу вверх. Строка — это последовательность символов, оканчивающаяся символом новой строки. Но мы можем сказать tac для работы с другими разделителями. Это позволяет нам рассматривать «порции» данных в текстовом файле как записи данных.
Допустим, у нас есть файл журнала какой-то программы, который нам нужно просмотреть или проанализировать. Давайте посмотрим на его формат с less .
Как мы видим, в файле есть повторяющийся формат. Существуют последовательности из трех строк шестнадцатеричных значений. Каждый набор из трех шестнадцатеричных строк имеет строку метки, которая начинается с «= SEQ», после чего следует последовательность цифр.
Если прокрутить до конца файла, мы увидим, что этих записей много. Финальный номер 865.
Давайте предположим, что по какой-то причине нам нужно работать через этот файл в обратном порядке, запись данных по записи данных. Порядок строк трех шестнадцатеричных строк в каждой записи данных должен быть сохранен.
Отметим, что последние три строки в файле начинаются с шестнадцатеричных значений 93, E7 и B8 в указанном порядке.
Давайте использовать tac чтобы перевернуть файл. Это очень длинный файл, поэтому мы добавим less .
Это переворачивает файл, но это не тот результат, который нам нужен. Мы хотим, чтобы файл был перевернут, но строки в каждой записи данных должны быть в их первоначальном порядке.
Ранее мы отмечали, что последние три строки в файле начинаются с шестнадцатеричных значений 93, E7 и B8 в указанном порядке. Порядок этих строк был обратным. Кроме того, строки «= SEQ» теперь находятся ниже каждого набора из трех шестнадцатеричных строк.
Давайте разберемся с этим.
Опция -s (разделитель) сообщает tac что мы хотим использовать в качестве разделителя между нашими записями. Он говорит tac не использовать свой обычный символ новой строки, а вместо этого использовать наш разделитель.
Опция -r (regex) указывает tac обрабатывать строку-разделитель как регулярное выражение .
Опция -b (before) заставляет tac перечислять разделитель перед каждой записью, а не после нее (что является обычной позицией ее разделителя по умолчанию, символа новой строки).
Строка -s (разделитель) ^=SEQ.+8+*$ расшифровывается следующим образом:
Символ ^ обозначает начало строки. Далее следует =SEQ.+2+*$ . Это инструктирует tac искать каждое вхождение «= SEQ» в начале строки, за которой следует любая последовательность цифр (обозначенная 2 ), а затем любой другой набор символов (обозначенный *$ ).
Как обычно, мы делаем всё less .
Наш файл теперь представлен в обратном порядке, где каждая строка метки «= SEQ» указана перед тремя строками шестнадцатеричных данных. Три строки шестнадцатеричных значений находятся в их исходном порядке в каждой записи данных.
Мы можем проверить это просто. Первое значение первых трех шестнадцатеричных строк (которые были последними тремя строками перед обращением файла) соответствуют значениям, которые мы взяли ранее: 93, E7 и B8, в указанном порядке.
Это просто хитрость для однострочных окон терминала.
У всего есть цель
В мире Linux даже самые простые на вид команды и утилиты могут обладать удивительными и мощными свойствами.
Философия проектирования простых утилит, которые хорошо выполняют одну задачу и легко взаимодействуют с другими утилитами, породила некоторые странные маленькие команды, такие как tac . На первый взгляд, это немного странно. Но когда вы вглядываетесь под поверхность, появляется неожиданная сила, которую вы можете использовать в своих интересах.
Или, как говорит другая философия: «Не презирай змею за то, что у нее нет рогов, ибо кто скажет, что она не станет драконом?»
Читайте также: