- STDIN (0) - Стандартний вхід
- STDOUT (1) - Стандартний вихід
- STDERR (2) - Стандартна помилка
Коли ми будемо працювати з трюками "pipe", "pipe" прийме STDOUT команди і передасть її STDIN наступної команди.
Давайте перевіримо деякі найпоширеніші способи включення команди “pipe” у своє щоденне використання.
Команда труби
Основне використання
Краще детально розглянути метод роботи “труби” на живому прикладі, вірно? Давайте розпочнемо. Наступна команда скаже “pacman”, менеджеру пакунків за замовчуванням для Arch та всіх дистрибутивів на основі Arch, роздрукувати всі встановлені пакети в системі.
pacman -Qqe
Це справді ДОВГИЙ список пакетів. Як щодо підбору лише декількох компонентів? Ми могли б використовувати “grep”. Але як? Одним із способів було б скинути вихідні дані до тимчасового файлу, "grep" бажаний результат і видалити файл. Ця серія завдань сама по собі може бути перетворена на сценарій. Але ми робимо сценарій лише для дуже великих речей. Для цього завдання, звернімось до сили “труби”!
pacman -Qqe | grep
Чудово, чи не так? "|" знак - це виклик команди “pipe”. Він захоплює STDOUT з лівої секції і подає його в STDIN правої секції.
У вищезазначеному прикладі команда “pipe” фактично передала вихідні дані в кінці частини “grep”. Ось як це відбувається.
pacman -Qqe> ~ / Робочий стіл / pacman_package.txtgrep python ~ / Робочий стіл / pacman_package.txt
Кілька трубопроводів
В основному, нічого особливого немає в розширеному використанні команди “pipe”. Від вас залежить, як ним користуватися.
Наприклад, почнемо з укладання кількох трубопроводів.
pacman -Qqe | grep p | grep t | grep py
Вихідні дані команди pacman фільтруються все далі і далі «grep» через серію трубопроводів.
Іноді, коли ми працюємо із вмістом файлу, він може бути дуже, дуже великим. Знайти правильне місце бажаного вступу може бути важко. Давайте шукатимемо всі записи, що містять цифри 1 і 2.
демонстрація котів.txt | grep -n 1 | grep -n 2
Маніпулювання списком файлів і каталогів
Що робити, коли ви маєте справу з каталогом, в якому є ТОНИ файлів? Прокрутити весь список досить прикро. Звичайно, чому б не зробити це більш терпимим за допомогою труби? У цьому прикладі давайте перевіримо список усіх файлів у папці “/ usr / bin”.
ls -l
Тут “ls” друкує всі файли та їх інформацію. Потім “pipe” передає його “more” для роботи з цим. Якщо ви не знали, «більше» - це інструмент, який перетворює тексти в один екранний перегляд за раз. Однак це старий інструмент, і згідно з офіційною документацією, рекомендується більше "менше".
ls -l / usr / bin | менше
Вихід сортування
Існує вбудований інструмент "сортування", який виконує введення тексту та сортує їх. Цей інструмент є справжньою перлиною, якщо ви працюєте з чимось справді безладним. Наприклад, я отримав цей файл, повний випадкових рядків.
демонстрація котів.txt
Просто перекладіть його, щоб "сортувати".
демонстрація котів.txt | сортувати
Так краще!
Друк сірників певного зразка
ls -l | знайти ./ -тип f -name "*.txt "-exec grep 00110011 \;
Це досить покручена команда, правильно? Спочатку “ls” видає список усіх файлів у каталозі. Інструмент "знайти" бере результат, шукає ".txt ”та викликає“ grep ”для пошуку“ 00110011 ”. Ця команда перевірить кожен окремий текстовий файл у каталозі з розширенням TXT та шукає збіги.
Друк вмісту файлу певного діапазону
Коли ви працюєте з великим файлом, зазвичай потрібно перевірити вміст певного діапазону. Ми можемо зробити це лише за допомогою розумного комбінування "кішка", "голова", "хвіст" і, звичайно, "труба". Інструмент “head” видає першу частину вмісту, а “tail” - останню частину.
кішкакішка
Унікальні цінності
При роботі з дублюючими виходами це може бути досить неприємно. Іноді повторне введення може спричинити серйозні проблеми. У цьому прикладі давайте додамо “uniq” на потік тексту та збережемо його в окремий файл.
Наприклад, ось текстовий файл, що містить великий список чисел, що складаються з 2 цифр. Тут точно є дубльований вміст, вірно?
кішка дублікат.txt | сортувати
Тепер давайте виконаємо процес фільтрації.
кішка дублікат.txt | сортувати | uniq> унікальний.txt
Перевірте результати.
кажан унікальний.txt
Виглядає краще!
Труби помилок
Це цікавий метод трубопроводів. Цей метод використовується для перенаправлення STDERR на STDOUT і продовження роботи з трубопроводами. Це позначається символом "| &" (без лапок). Наприклад, давайте створимо помилку і надішлемо результат на інший інструмент. У цьому прикладі я просто набрав якусь випадкову команду і передав помилку “grep”.
adsfds | & grep n
Заключні думки
Хоча сама «труба» досить спрощена за своєю суттю, спосіб її роботи пропонує дуже універсальний спосіб використання методу нескінченно. Якщо ви любите сценарії Bash, то це набагато корисніше. Іноді ти можеш просто відверто робити божевільні речі! Дізнайтеся більше про сценарії Bash.