ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)
Понедельник, 31 марта, 2025
Сегодня у нас 1 праздник:
Международный День Резервного Копирования (World Backup Day). Пользователи сайта социальных новостей reddit предложили сделать дату 31.03 Международным днём резервного копирования, аргументируя это тем, что никогда заранее нельзя узнать, какие сюрпризы преподнесёт 1.04

Учебное пособие по Pipe в Bash

Учебное пособие по Pipe в Bash

Обычно мы получаем вывод любой команды в терминал. Иногда нам нужно отправить вывод команды как ввод другой команды. Эту задачу можно выполнить, выполнив команды несколько раз. Но эту задачу можно легко выполнить с помощью команды канала, которая выполняет две или более команд одновременно в Linux, где вывод одной команды является вводом следующей команды. ‘|’ оператор используется для трубопровода. Использование команды pipe описано в этой статье.

 

Примеры команд канала

Различные варианты использования команды pipe (|) показаны в этой части статьи.

 

Пример 1: запись в файл

Конкретное строковое значение может быть записано в новый файл с помощью команд «echo» и «cat».

Выполните следующую команду, чтобы записать строковое значение в файл test.txt. Здесь вывод команды «echo» передается как ввод команды «cat»:

$ echo "Learn bash programming" | cat > test.txt

 

Выполните следующую команду, чтобы проверить содержимое файла test.txt :

$ cat test.txt

 

Следующий вывод показывает, что файл успешно создан с выводом команды «echo»:

andreyex@andreyex:-$ echo "Learn bash programming" | cat > test.txt 

andreyex@andreyex:~$ cat test.txt Learn bash programming 

andreyex@andreyex: -$

 

Пример 2. Подсчет общего количества конкретных файлов

В этом примере показан метод подсчета общего количества текстовых файлов, начинающихся со слова «test». Эту задачу можно выполнить с помощью нескольких команд или одной команды с вертикальной чертой (|).

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

$ ls *.txt

 

Следующий вывод показывает, что есть два текстовых файла, которые начинаются со слова «test». Это test.txt и testfile.txt:

andreyex@andreyex:-$ ls *.txt

error.txt file2.txt fruits.txt output.txt testfile.txt 
file.txt filter.txt items.txt students.txt 
file1.txt folderList.txt myfile.txt test.txt

andreyex@andreyex: -$

 

Выполните следующую команду, чтобы сохранить список текстовых файлов в переменной $list:

$ list=`ls *.txt`

 

Выполните следующую команду, чтобы узнать список текстовых файлов, начинающихся со слова «test», и сохраните их в файле filter.txt:

$ grep test*.txt $list > filter.txt

 

Выполните следующую команду, чтобы подсчитать общее количество строк в файле filter.txt:

$ wc -l filter.txt

 

После выполнения предыдущих команд появляется следующий вывод:

andreyex@andreyex:-$ list='ls *.txt

andreyex@andreyex:-$ grep test*.txt $list > filter.txt 

andreyex@andreyex:-$ wc -l filter.txt 
2 filter.txt

andreyex@andreyex: - $

 

Задачу предыдущих команд можно легко выполнить с помощью следующей одиночной команды, в которой вывод команды ls отправляется в качестве ввода команды grep. Вывод команды «grep» аналогичен вводу команды wc с использованием канала (|).

$ ls *.txt | grep test | wc -l

 

После выполнения предыдущей команды появляется следующий вывод:

andreyex@andreyex:-$ ls *.txt | grep test | wc -l 2

andreyex@andreyex: -$

 

Пример 3. Сортировка содержимого файла

Команду sort можно использовать для сортировки содержимого файла различными способами. В этой части руководства показан метод сортировки содержимого текстового файла с помощью команд «cat» и «sort».

Создайте текстовый файл с именем products.txt со следующим содержимым:

Mouse A4Tech 100

Monitor DELL 120

Keyboard Defender 200

Scanner Epson 230 

Headphone Apple 111

 

Выполните следующую команду, чтобы проверить содержимое файла products.txt:

$ cat products.txt

 

После выполнения предыдущей команды появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt 
Mouse A4Tech 100 
Monitor DELL 120 
KB MSI 200 
Scanner Epson 230 
IPOD Apple 111 

andreyex@andreyex:-/Desktop/bash$

 

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

$ cat products.txt | sort

 

После выполнения предыдущей команды появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt | sort
IPOD Apple 111 
KB MSI 200 
Monitor DELL 120 
Mouse A4Tech 100 
Scanner Epson 230 

andreyex@andreyex:-/Desktop/bash$

 

Выполните следующую команду, чтобы отсортировать содержимое файла в порядке убывания на основе первого столбца файла:

$ cat products.txt | sort -r

 

После выполнения предыдущей команды появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt | sort -r 
Scanner Epson 230 
Mouse A4Tech 100 
Monitor DELL 120 
KB MSI 200 
IPOD Apple 111 

andreyex@andreyex:-/Desktop/bash$

 

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

$ cat products.txt | sort -k3

 

После выполнения предыдущей команды появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt | sort -k3
Mouse A4Tech 100 
IPOD Apple 111 
Monitor DELL 120 
KB MSI 200 
Scanner Epson 230 

andreyex@andreyex: -/Desktop/bash$

 

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

$ cat products.txt | sort | cat > sortedProduct.txt

 

Выполните следующую команду, чтобы проверить содержимое файла sortedProduct.txt:

$ cat sortedProduct.txt

 

После выполнения предыдущих команд появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt | sort | cat > sortedProduct.txt 
andreyex@andreyex:-/Desktop/bash$ cat sortedProduct.txt 
IPOD Apple 111 
KB MSI 200 
Monitor DELL 120 
Mouse A4Tech 100 
Scanner Epson 230 

andreyex@andreyex:-/Desktop/bash$

Пример 4. Чтение конкретного содержимого файла

Команда «head» используется для чтения определенного количества строк с начала файла. Команда «tail» используется для чтения определенного количества строк с конца файла. В этом примере показаны методы использования команд «cat» и «head», «cat» и «tail», а также команд «cat», «head» и «tail» с оператором вертикальной черты (|).

Выполните следующие команды, чтобы проверить содержимое файла products.txt и распечатать первые две строки файла products.txt:

$ cat products.txt
$ cat products.txt | head -2

 

После выполнения предыдущих команд появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt 
Mouse A4Tech 100 
Monitor DELL 120 
KB MSI 200 
Scanner Epson 230 
IPOD Apple 111 

andreyex@andreyex:-/Desktop/bash$ cat products.txt | head -2 
Mouse A4Tech 100 
Monitor DELL 120 

andreyex@andreyex: -/Desktop/bashş

 

Выполните следующие команды, чтобы проверить содержимое файла products.txt и распечатать последние три строки файла products.txt:

$ cat products.txt
$ cat products.txt | tail -3

 

После выполнения предыдущих команд появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt
Mouse A4Tech 100 
Monitor DELL 120 
KB MSI 200 
Scanner Epson 236 
IPOD Apple 111 

andreyex@andreyex:-/Desktop/bash$ cat products.txt | tail -3 
KB MSI 200 
Scanner Epson 230 
IPOD Apple 111 

andreyex@andreyex:-/Desktop/bashs

 

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

$ cat products.txt
$ cat products.txt | head -3 | tail -1

 

После выполнения предыдущих команд появляется следующий вывод:

andreyex@andreyex:-/Desktop/bash$ cat products.txt 
Mouse A4Tech 100 
Monitor DELL 120 
KB MSI 200 
Scanner Epson 230 
IPOD Apple 111

andreyex@andreyex:-/Desktop/bash$ cat products.txt | head -3 | tail - KB MSI 200

andreyex@andreyex: -/Desktop/bash$

Заключение

Оператор канала (|) — очень полезный оператор Bash, который используется для разных целей. Некоторые распространенные варианты использования этого оператора показаны в этом руководстве на различных примерах. Мы надеемся, что после прочтения этой статьи пользователям Bash станет понятно использование оператора канала (|).

Exit mobile version