Работа с текстовыми файлами из командной строки — это повседневная задача для системных администраторов, разработчиков и обычных пользователей Linux и Unix-подобных систем. Часто возникает необходимость не просматривать весь файл целиком, а быстро вывести на экран конкретную строку по её номеру. В этой статье мы подробно разберем несколько эффективных способов сделать это, используя стандартные утилиты командной строки.
Метод 1: Использование утилиты sed (Самый прямой способ)
Утилита sed (Stream Editor) является одним из самых мощных инструментов для обработки текста. Чтобы вывести на экран определенную строку из файла, вы можете использовать специальный синтаксис с командой удаления !d.
Укажите в кавычках (или без них, но кавычки предпочтительнее для избежания конфликтов с оболочкой) номер нужной строки и сочетание !d. Вторым аргументом должно быть имя файла. Логика проста: d означает «удалить», а ! инвертирует условие. То есть мы просим утилиту удалить все строки, кроме указанной.
Например, чтобы вывести строку 47 из файла placement-list, введите:
$ sed '47!d' placement-list
Если вам нужно вывести участок файла в несколько строк, укажите номера стартовой и конечной строки через запятую.
Чтобы вывести строки с 47 по 108 из файла placement-list, введите:
$ sed '47,108!d' placement-list
Метод 2: Комбинация head и tail (Конвейерный метод)
Вы можете скомбинировать команды head (вывод начала файла) и tail (вывод конца файла) в конвейер (pipe), чтобы добиться нужного результата. Это классический Unix-подход, при котором вывод одной команды передается на вход другой.
Чтобы вывести десятую строку файла placement-list, вы можете сначала взять первые 10 строк с помощью head, а затем передать их в tail, оставив только последнюю (1 строку):
$ head -10 placement-list | tail -1
Если вам нужно вывести строки, отсчитывая их с конца файла, логика немного меняется. Например, чтобы вывести пятую и четвертую строки с конца файла placement-list, нужно сначала взять последние 5 строк, а затем из них взять первые 2:
$ tail -5 placement-list | head -2
Работа с отдельными символами
Используя опцию -c (characters), можно выводить определенное число символов, а не строк. Это открывает дополнительные возможности для конвейерной обработки:
Дополнительные возможности sed
Утилита sed предназначена не только для вывода строк по номеру. Вы можете использовать её для выделения текста между строками определенного вида (по регулярным выражениям). Для выделения определенного абзаца или текста по шаблону используйте опцию -n с указанием строки поиска.
Базовые утилиты для просмотра текста
Для полноты картины стоит вспомнить базовые команды, которые используются для просмотра файлов:
- cat — выводит все содержимое файла. Удобна для небольших файлов. Полезные опции:
-v— выводит не отображаемые на печати символы (например, управляющие символы будут представлены как^G).-E— отображает символ$в конце каждой строки.-T, выводит все табуляции в виде^I.-A— комбинирует все три вышеуказанные опции (-vET).
- head — по умолчанию выводит первые 10 строк. С помощью аргумента (например,
head -66) можно указать требуемое число строк. - tail — по умолчанию выводит последние 10 строк. Опция
-fпозволяет непрерывно просматривать конец «растущего» файла (например, логов). Для прекращения просмотра нажмитеCtrl-c.
Напечатать конкретную строку из текстового файла по её номеру достаточно просто. Если вам нужна одна конкретная строка, использование sed 'N!d' filename является самым элегантным и прямым решением. Однако конвейер из head и tail также отлично справляется с задачей и может быть более интуитивно понятным для тех, кто только начинает знакомиться с командной строкой Linux. Выбор метода зависит от ваших личных предпочтений и конкретной задачи.