Поиск по сайту:

Как передать вывод команды в файл в Linux


Конвейер — это команда, которая используется большинством пользователей Linux для перенаправления вывода команды в любой файл. Операционные системы Unix и Linux используют эту команду для отправки вывода любого процесса, вывода или программы в качестве ввода другому процессу. Эти операционные системы разрешают соединение между командами stdout и stdin. Для выполнения этой функции можно использовать символ вертикальной черты «|».

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

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

Передача списка файлов и каталогов:

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

$ ls -l | more

Здесь вывод «ls» рассматривается как ввод команды «more». В результате выполнения этой инструкции на экране одновременно отображается вывод команды ls. Канал предоставляет возможность контейнера для получения выходных данных команды ls и передачи их другим командам в качестве входных данных.

Поскольку основная память выполняет реализацию конвейера, эта команда не использует диск для создания связи между стандартным выводом ls -l и стандартным вводом команды more. Приведенная выше команда аналогична следующей серии команд с точки зрения операторов перенаправления ввода/вывода.

$ ls -l > temp

$ more < temp

Проверьте содержимое файла «temp» вручную.

$ rm temp

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

Теперь мы увидим пример использования канала для сортировки содержимого файла и вывода его уникальных значений. Для этого мы объединим команды «sort» и «uniq» с помощью вертикальной черты. Но сначала выберите любой файл, содержащий числовые данные, в нашем случае это файл «record.txt».

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

$ cat record.txt

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

$ sort record.txt | uniq

Использование Pipe с командами Head и Tail

Вы также можете использовать команды «head» и «tail» для вывода строк из файла в определенном диапазоне.

$ cat samplefile | head -7 | tail -5

Процесс выполнения этой команды выберет первые семь строк «samplefile» в качестве входных данных и передаст их хвостовой команде. Команда tail извлечет последние 5 строк из «samplefile» и распечатает их в терминале. Поток между выполнением команд происходит из-за каналов.

Сопоставление определенного шаблона при сопоставлении файлов с использованием конвейеров

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

$ ls -l | find ./ -type f -name "*.txt"

Команда Pipe в сочетании с «grep», «tee» и «wc».

Эта команда выберет «Алекс» из файла «record.txt» и в терминале распечатает общее количество вхождений шаблона «Алекс». Здесь pipe объединяет команды «cat», «grep», «tee» и «wc».

$ cat record.txt | grep "Alex" | tee file1.txt | wc -l
$ cat file1.txt

Заключение:

Канал — это команда, которая используется большинством пользователей Linux для перенаправления вывода команды в любой файл. Символ вертикальной черты «|» может использоваться для прямой связи между выводом одной команды и вводом другой. В этом посте мы рассмотрели различные методы передачи вывода команды на терминал и в файлы.

Статьи по данной тематике: