Фильтры в Linux

Автор: | 18/03/2024

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

Что такое фильтры

Фильтры— это команды, которые преобразуют переданные текстовые данные определенным образом. 

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

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

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

head — это команда, которая печатает первые несколько строк ввода. По умолчанию она напечатает первые 10 строк, но это можно изменить с помощью аргумента. 

В общем виде команда head используется следующим образом:

Давайте выведем первые 4 строки из файла mysampledata.txt.

tail — команда, которая печатает последние строки ввода. По умолчанию она также напечатает 10 последний строк. Количество также можно изменить с помощью аргумента.

В общем виде команда tail используется следующим образом:

Теперь давайте выведем последние 3 строки файла mysampledata.txt.

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

В общем виде команда sort используется следующим образом:

Давайте отсортирует строки нашего файла mysampledata.txt по алфавиту.

nl (сокращение от number lines) — это команда, которая нумерует строки вывода.

В общем виде команда nl используется следующим образом:

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

Точки добавились, но строки почему-то съехали. Посмотрите внимательно на пример выше и попробуйте сами понять, в чем дело. 

В примере выше мы использовали два параметра: -s и -w

  • Параметр -s указывает, что нужно добавить после номера строки. Мы указали точку с пробелом — в командной строке это нужно было записать в кавычках.  
  • Параметр -w добавляет отступы. Мы указали 10 — Linux поставил 10 пробелов. 

wc (сокращение от word count) — это команда, которая считает количество слов, символов или строк. По умолчанию wc выведет все три цифры. 

Но все три значения нужны не всегда. Если после команды wc написать -l, команда выведет только количество строк. 

Параметры -w и -m выведут по отдельности количество слов и символов соответственно. 

Давайте попробуем указать сразу несколько параметров одновременно.

cut — это команда, которая вырезает определенные столбцы из переданных текстовых данных. 

В общем случае команда cut используется следующим образом:

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

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

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

sed (сокращение от stream editor) — это команда, которая умеет искать и заменять данные. Эта очень мощная команда, у нее много потенциала. Но в рамках этой статьи мы рассмотрим только ее базовое поведение.

В общем виде команда sed используется следующим образом:

Базовый вид выражения выглядит вот так:

  • Первая буква s означает действие, которое нужно выполнить. s = substitute = заменить.
  • После первой косой черты / мы записываем то, что нужно найти и поменять. 
  • После второй косой черты / мы записываем то, на что нужно заменить найденную подстроку. 
  • Буква g в конце означает global, то есть поиск и замена будет осуществляться глобально. В нашем случае это не играет никакой роли, и g можно спокойно опустить. 

Разберем пример. Допустим, у нас закончились апельсины, и ребятам из файла mysampledata.txt мы хотим заменить все апельсины на бананы. 

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

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

Совет. Не забывайте об одинарных кавычках, иначе командная строка будет делать совсем не то, что вам нужно. Вы всегда можете нажать Ctrl + C, чтобы остановить программу и вернуться к приглашению.

uniq (сокращение от unique, уникальный) — это команда, которая удаляет повторяющиеся строки. С одним важным ограничением: удаляемые символы должны стоять рядом друг с другом.

В общем виде команда uniq используется следующим образом:

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

Исправить ошибку нам поможет команда uniq. С ее помощью мы сейчас просто удалим продублировавшиеся строчки.

tac — это команда, обратная команде cat. Она выводит на экран файл с конца, т. е. первой напечатается последняя строчка и так далее. 

В общем виде команда tac используется следующим образом:

Давайте «перевернем» наш список из файла mysampledata.txt.

https://codechick.io/tutorials/unix-linux/unix-linux-filtres