Обычно мы получаем вывод любой команды в терминал. Иногда нам нужно отправить вывод команды как ввод другой команды. Эту задачу можно выполнить, выполнив команды несколько раз. Но эту задачу можно легко выполнить с помощью команды канала, которая выполняет две или более команд одновременно в 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 станет понятно использование оператора канала (|).