Команда tac в linux

Обновлено: 02.07.2024

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

Команда кота

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

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

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

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

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

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

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

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

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

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

Проверь это - Как экспортировать заметки в виде текстовых файлов в macOS

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

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

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

Не нумеровать пустые строки

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

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

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

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

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

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

Вкладки дисплея

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

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

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

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

Концы строк обозначаются символом «$».

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

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

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

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

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

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

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

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

Перенаправление stdin

Звук далекой турбины - это, вероятно, Льюис Кэрролл, крутящийся в могиле на высокой скорости.

Команда tac

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

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

Использование tac с stdin

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

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

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

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

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

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

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

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

Последний трюк в рукаве - это красота.

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

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

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

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

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

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

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

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

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

tac спешит на помощь.

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

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

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

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

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

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

Мы, как обычно, сокращаем все до минимума.

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

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

Это довольно уловка для однострочного окна терминала.

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

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

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

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

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

Команды постраничного просмотра текстовых файлов less и more.

Для того, чтобы просмотреть огромный текстовый файл применяются команды для постраничного просмотра. Такие как more и less.

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

Откроем для просмотра текстовый файл:

Команда more

Теперь можно управлять просмотром текста с помощью нажатия следующих кнопок на клавиатуре:

SPACE Переместиться на одну страницу вниз
ENTER Переместиться на одну строку вниз
d Переместиться на полстраницы вниз
b Переместиться на одну страницу вверх
h Помощь
q Выход

У команды more есть и опции.

Если мы хотим читать текст по определенному количеству строк, то указываем - (тире/минус) и количество строк:

Команда more

Если хотим начать чтение с определенной строки, то указываем + (плюс) и номер строки, с которой нужно начать чтение:

Команда more

У команды more очень много недостатков. Нельзя читать текст вверх, только вниз. Текст остается в терминале после просмотра. Поэтому и была разработана less.

Просто совет, забудьте, что есть такая команда, как more и используйте less.

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

Откроем текстовый файл для просмотра:

Команда less

Сразу стоит упомянуть, что less умеет всё тоже, что и more. Поэтому не буду повторяться с опциями, которые позволяют начать чтения с определенной строки и количество строк на страницу.

Кнопки для управления просмотра текста:

стрелка_вверх Переместиться на одну строку вверх
стрелка_вниз Переместиться на одну строку вниз
PageUp Переместиться на одну страницу вверх
PageDown Переместиться на одну страницу вниз
SPACE Переместиться на одну страницу вниз
ENTER Переместиться на одну строку вниз
d Переместиться на полстраницы вниз
b Переместиться на одну страницу вверх
h Помощь
q Выход

Удобно искать слова в тексте.

Поиск текста вниз.

Просто набираем слеш / и вводим любой текст для поиска. Клавиша n – переход к следующему найденному тексту. Клавиша N – переход к предыдущему найденному тексту.

Команда less

Обратный поиск.

Просто набираем ? (знак вопроса) и вводим любой текст для поиска. Клавиша n – переход к следующему найденному тексту. Клавиша N – переход к предыдущему найденному тексту.

Команда less

Для перехода в начало документа используется клавиша g, для перехода в конец документа - G. Кроме того, мы можем перейти на определенную строку введя число и g, к примеру, 50g переведет нас на 50 строку.

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

Для того, чтобы отобразить номера строк в файле, можно указать опцию -N или ввести её прямо во время просмотра:

Команда less

Кроме того, команды less и more можно использовать для просмотра стандартных потоков вывода (подробнее о них в 3-ей статье). Для этого нужно указать в конце команды: | less или | more.

К примеру, хотим просмотреть список установленных приложений постранично:

Команда less

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

Ну и последнее, что хочется упомянуть, что если нажать F, то курсор будет переведён в конец файла и будет ожидание добавления новых строк (аналогично команде tail -f).

Команды head и tail.

Как не трудно догадаться по названиям (легко запомнить), то команда head отображает "голову" текстового файла, а tail - его "хвост". Они очень простые в использовании, давайте рассмотрим их более подробнее.

Выполнение команды head выведет первые 10 строк текстового файла, в общем виде выглядит следующим образом:

Давайте выведем первые 10 строк:

Команда head

Если мы хотим вывести определенное количество строк (вместо 10 по умолчанию) с начала текстового файла, то укажем опцию - (тире/минус) и количество строк:

Команда head

Если команду head мне не приходилось использовать никогда, то команда tail очень нужная и очень часто используется.

Выполнение команды tail выведет последние 10 строк файла, в общем виде выглядит следующим образом:

Давайте выведем последние 10 строк:

Команда tail

Если хотим вывести определение количество строк с конца текстового документа, то нужно указать опцию (как и в случае с heaf) - (тире/минус) и количество строк:

Команда tail

Либо -n и количество строк. Если указывать другие опции, помимо количества строк, то нужно использовать именно эту конструкцию:

Команда tail

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

Команда tail

Команда не завершается и если в этот текстовый файл добавятся другие строки, то мы увидим их.

C опцией -f можно указать количество строк -n:

Команда tail

Очень часто использую её для просмотра логов в режиме реального времени.

Команды cat и tac.

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

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

Команда cat

Чтобы отобразить номера строк, нужно использовать опцию -n:

Команда cat

С помощью перенаправления стандартного потока вывода мы можем делать интересные вещи.

К примеру, можно создать копию текущего файла:

Команда cat

Можно добавить текст из одного файла в другой:

Команда cat

Можно объединить несколько файлов в один:

Команда cat

Как упоминалось выше, |less и |more можно использовать для просмотра стандартных потоков вывода. Команда cat не исключение:

Команда tac - это тоже самое, что и cat, только отображает строки в обратном порядке.

Для лучшего понимания, о чём идёт речь, просто посмотрите на следующий скриншот:

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

Фильтры в Linux

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

В приведенных ниже примерах мы будем предоставлять данные для этих программ с помощью файла.

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

head

head [-количество строк для печати] [путь]

Фильтры в Linux head

tail

tail [-количество строк для печати] [путь]

Фильтры в Linux tail

Выше было поведение tail по умолчанию. А ниже указывается заданное количество строк.

sort

sort [-options] [path]

Фильтры в Linux sort

nl

Обозначение чисел в Linux реализуется за счет команды nl.

nl [-options] [путь]

Фильтры в Linux nl

Вот еще несколько полезных опций командной строки.

В приведенном выше примере мы использовали 2 параметра командной строки. Первый -s указывает, что следует печатать после числа. С другой стороны, второй -w указывает, сколько отступов ставить перед числами. Для первого нам нужно было включить пробел как часть того, что было напечатано.

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

wc

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

wc [-options] [путь]

Фильтры в Linux wc 1

Иногда вам просто нужно одно из этих значений. -l даст нам только строки, -w даст нам слова, а -m даст нам символы.

Фильтры в Linux wc 2

Кроме того, Вы можете комбинировать аргументы командной строки.

Фильтры в Linux wc 3

cut

вырезать [-опции] [путь]

В нашем примере файла у нас есть данные в 3 столбцах. Допустим, мы хотели только первый столбец.

Фильтры в Linux cut

По умолчанию cut использует символ TAB

По умолчанию cut использует символ TAB в качестве разделителя для идентификации полей. Опция -f позволяет нам указать, какое поле мы бы хотели. Если нам нужно 2 или более полей, мы разделяем их запятой, как показано ниже.

sed

Sed расшифровывается как Stream Editor и позволяет эффективно выполнять поиск и замену наших данных. Это довольно мощная команда, но мы будем использовать ее здесь в ее базовом формате.

sed <выражение> [путь]

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

Фильтры в Linux sed

uniq

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

uniq [опции] [путь]

Фильтры в Linux uniq

tac

Ребята из Linux известны своим забавным чувством юмора. Программа TAC на самом деле является CAT наоборот. Это было названо так, как это делает противоположность CAT. Получив данные, он напечатает последнюю строку первой, вплоть до первой строки.

На основе статьи “9 really odd Linux commands” и обсуждений на Quora.


Основные команды Linux, необходимые для «выживания», встречаются в статьях довольно часто. Сюда относятся создание (копирование, перемещение) файлов и директорий, поиск по файловой системе, установка прав доступа к файлам (это уже реже). Также есть статьи о странных командах, запускаемых, главным образом, ради развлечения. А вот команды полезные, но выходящие за пределы базовых, встречаются в статьях нечасто. Автор блога hexx.in.ua решила найти упоминания таких команд в англоязычных статьях и скомпилировать в один пост.

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

Команда shuf — сокращение от «shuffle» («смешивать», «перемешивать») — реорганизовывает строки файла псевдорандомным образом. Например, можно «скормить» команде список коллег и определить очередность, с которой они должны приносить в офис печенье.

Если передать этой команде в качестве аргумента какой-нибудь список, можно вывести не все пункты этого списка, а лишь необходимое количество. Например, получить имя только одного коллеги. Или трех. Для этого нужно использовать опцию -n и указать количество пунктов списка, которое хотите получить.

Также можно задавать диапазон чисел, которые хотите рандомизировать. Для этого используется опция -i.

shuf linux command

При помощи команды rev можно развернуть строки, переданные в качестве аргумента.

rev linux command

Команда tac это будто оборотная сторона команды cat. Она, как и cat, объединяет файлы, но строки этих файлов размещаются в обратном порядке.



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


Команда look может понадобиться, если вам нужно найти в файле строки, начинающиеся с определенного слова. Если не передать команде файл в качестве аргумента, будет использоваться системный файл /usr/share/dict/words.

look linux command

Выводит заданную строку (или букву “y”) в бесконечном цикле. Кажется, что в этом нет никакого смысла, но команда имеет практическое применение, в частности, в конвейерах, для подтверждения действий.

yes linux command

Пример использования приводит Билл Томпсон на сайте Quora:

«Скажем, у вас в директории есть пара сотен файлов, которые вы хотите удалить (интерактивно). Вы вводите команду “rm -i *”. Операционная система будет вас переспрашивать по каждому файлу: “rm: remove regular file ‘filename’?” Для ответа вы должны будете вводить “y”. Можно проделать это 200 раз, а можно использовать конвейер:

Конечно, есть более простые способы удаления файлов, но этот пример демонстрирует использование команды yes».

factor

factor command

Команда factor предназначена для разложения чисел на простые множители.

Команда mmv предназначена для копирования, перемещения (переименования), создания ссылок на несколько файлов одновременно. Для всего этого используются специальные символы. Что именно можно сделать при помощи этой команды?

Например, можно изменить расширение всех файлов в директории:

Можно удалить третью (например) букву из имени каждого файла:

Можно поменять местами части расширения файлов, заменив .html.en, .html.de на .en.html, .de.html:

С опцией -c команда будет не переименовывать, а копировать файлы.

mmv

Эта команда предназначена для построчного сравнения двух отсортированных файлов. Применив команду comm, можно увидеть:

  • все, что есть в файле а, но отсутствует в файле b,
  • все, что есть в файле b, но отсутствует в файле а,
  • все, что есть в обоих файлах,
  • предыдущие варианты в разных комбинациях.

Команда особенно полезна для сравнения списков. Например, списков пользователей двух разных систем. Главное — не забыть сначала отсортировать эти списки.

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