ИТ Блог. Администрирование серверов на основе Linux (Ubuntu, Debian, CentOS, openSUSE)

Учебное пособие по 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