Команда Pipe, Grep і Sort у Linux/Unix із прикладами

⚡ Розумний підсумок

Команди pipe, grep та sort у Linux та Unix ланцюжок та фільтрують текст: pipe передає вивід однієї команди в наступну, grep шукає шаблони, а sort упорядковує рядки, тоді як фільтри перетворюють дані між ними.

  • 🔗 Труба: Символ вертикальної риски | передає вивід однієї команди як вхід наступної.
  • 📄 Пейджинг: Команда cat, передана по конвеєру less, pg або more, показує довгий файл по одному екрану за раз.
  • 🔍 захоплення: Команда grep шукає у файлі рядки, що відповідають заданому рядку або шаблону.
  • 🎚️ параметри grep: Такі прапорці, як -v, -c, -n, -i та -l, інвертують, підраховують, нумерують, ігнорують регістр та виводять список файлів.
  • 🔤 сортувати: Команда сортування впорядковує рядки файлу, використовуючи опції -r, -n та -f для упорядкування у зворотному порядку, числового порядку та без урахування регістру.
  • 🧪 Фільтри: Команди фільтрації, такі як grep, sort, awk, sed та wc, обробляють вхідні дані та створюють вивід.
  • 🤖 Допомога ШІ: Асистенти ШІ та GitHub Copilot можуть створювати та пояснювати конвеєри pipe, grep та sort.

Команди pipe, grep та sort у Linux та Unix з прикладами

Канали, grep та сортування є одними з найбільш використовуваних інструментів на Linux командного рядка, оскільки вони дозволяють об'єднувати невеликі команди в один потужний робочий процес. На цій сторінці пояснюється кожна з них із практичними прикладами, а потім показано, як фільтри пов'язують їх між собою.

Що таке труба в Linux?

Канал (pipe) — це команда в Linux, яка дозволяє використовувати дві або більше команд таким чином, що вивід однієї команди слугує вхідними даними для наступної. Коротше кажучи, вивід кожного процесу безпосередньо надходить як вхідні дані до наступного, подібно до конвеєра. Символ '|' позначає канал.

Конвеєри допомагають об'єднати дві або більше команд одночасно та виконувати їх послідовно. Ви можете використовувати потужні команди, які виконують складні завдання миттєво.

Давайте розберемося в цьому на прикладі.

Коли ви використовуєте команду «cat» для перегляду файлу, який охоплює кілька сторінок, запит швидко переходить на останню сторінку файлу, і ви не бачите вмісту посередині.

Щоб уникнути цього, ви можете перенаправити вивід команди 'cat' до 'less', що покаже вам лише одну довжину прокручування контенту за раз.

cat filename | less

Ілюстрація прояснить це. На діаграмі нижче показано, як канал передає вивід однієї команди в наступну.

Діаграма Linux-каналу, що передає вивід однієї команди як вхідні дані наступній

команди «pg» і «more».

Замість «less» можна також використовувати команду pg або more:

cat Filename | pg

or

cat Filename | more

Потім ви можете переглянути файл по частинах та прокрутити вниз, просто натиснувши клавішу Enter. На скріншоті нижче показано файл, розгорнутий за допомогою команди more.

cat передається команді more, яка підкачує довгий файл по одному екрану за раз

Команда grep

Припустимо, ви хочете знайти певну інформацію, таку як поштовий індекс, у текстовому файлі.

Ви можете вручну переглянути вміст самостійно, щоб tracінформацію. Кращим варіантом є використання GREP команда. Вона сканує документ на наявність потрібної інформації та представляє результат у потрібному вам форматі.

Синтаксис:

grep search_string

Давайте розглянемо це в дії. На скріншоті нижче показано результат пошуку.

Команда grep, яка шукає у файлі зразка рядки Apple та Eat

Тут команда grep виконала пошук у файлі 'sample' рядків 'Apple' та 'Eat'. З цією командою можна використовувати такі параметри.

варіант функція
-v Показує всі рядки, які не відповідають шуканому рядку
-c Відображає лише кількість відповідних рядків
-n Показує відповідний рядок і його номер
-i Збігається як з великими, так і з малими регістрами
-l Показує лише назву файлу з рядком

Давайте спробуємо використати опцію '-i' для того ж файлу, що й вище. На скріншоті нижче показано результат без урахування регістру.

grep -i виконує пошук літери a без урахування регістру

Використовуючи опцію '-i', grep відфільтрував рядок 'a' (без урахування регістру) з усіх рядків.

Команда сортування

Ця команда допомагає сортувати вміст файлу в алфавітному порядку.

Синтаксис цієї команди такий:

sort Filename

Розглянемо вміст файлу, показаного нижче за допомогою cat.

Команда cat, яка показує несортований вміст файлу abc

Виконання команди sort упорядковує ці рядки в алфавітному порядку, як показано нижче.

Команда сортування, яка упорядковує вміст файлу abc в алфавітному порядку

Також існують розширення цієї команди, і вони перелічені нижче.

варіант функція
-r Reverseсортування
-n Сортує чисельно
-f Сортування без урахування регістру

У наведеному нижче прикладі показано зворотне сортування вмісту у файлі "abc".

Команда sort -r зворотне сортування вмісту файлу abc

Що таке фільтр?

У Linux є багато команд фільтрації, таких як awk, grep, sed, spell та wc. Фільтр приймає вхідні дані від однієї команди, виконує певну обробку та видає результат.

Коли ви передаєте дві команди по конвеєру, «фільтрований» вивід першої команди передається наступній. На діаграмі нижче показано, як фільтр вписується в конвеєр.

Схема фільтра Linux, який приймає вхідні дані, обробляє їх та створює вихідні дані

Давайте розберемося з цим за допомогою прикладу. У нас є наступний файл 'sample', показаний за допомогою cat нижче.

Команда cat відображає вміст файлу зразка перед фільтрацією

Ми хочемо виділити лише ті рядки, які не містять символу 'a', але результат має бути у зворотному порядку. Для цього можна використовувати наступний синтаксис:

cat sample | grep -v a | sort -r

Давайте подивимося на результат, показаний на скріншоті нижче.

cat пройшов через grep -v та sort -r, створивши рядки у зворотному порядку без літери a

Поширені запитання

Канавка (|) надсилає вивід однієї команди безпосередньо до іншої команди, об'єднуючи їх разом. Перенаправлення (> та <) натомість з'єднує команду з файлом, записуючи вивід у файл або зчитуючи вхідні дані з нього. Канавки пов'язують команди; перенаправлення пов'язує команди та файли.

grep розшифровується як Global Regular Expression Print (друк глобального регулярного виразу). Він сканує файл або вхідні дані рядок за рядком і друкує кожен рядок, який відповідає заданому шаблону. Назва походить від старої команди редактора ed g/re/p, яка виконувала той самий пошук.

Команда sort має опцію -u, яка сортує та видаляє дублікати рядків за один крок: sort -u file. Ви також можете передати sort в uniq по конвеєру, як у sort file | uniq, оскільки uniq видаляє лише дублікати, які вже розташовані поруч.

Завершіть конвеєр перенаправленням: cat sample | grep -va | sort -r > result.txt записує кінцевий вивід у файл. Щоб побачити вивід на екрані та одночасно зберегти його, перейдіть до команди tee.

Команда grep шукає всередині файлів рядки, що відповідають текстовому шаблону. Команда find знаходить файли та каталоги за назвою, розміром, типом або датою. Коротше кажучи, grep переглядає вміст файлів, тоді як find шукає файли по всьому дереву каталогів.

Команда tee зчитує дані з конвеєра та записує їх одночасно на екран та в один або декілька файлів, наприклад, grep error log | tee errors.txt. Це дозволяє зберігати проміжний вивід, не порушуючи роботу конвеєра.

Помічники штучного інтелекту можуть запропонувати правильний ланцюжок команд, що передаються через конвеєр, на основі запиту, написаного простою англійською мовою, пояснити незнайомі прапорці grep або sort, а також виявити помилки в конвеєрі. Інструменти машинного навчання також сканують вивід журналів, що передаються через конвеєр, щоб позначити аномалії, які ручна фільтрація пропустила б.

Так. Копілот GitHub може генерувати конвеєри, що поєднують cat, grep та sort з короткого коментаря, що описує ваші потреби, та виконувати команди під час введення. RevПерегляньте будь-який запропонований конвеєр на прикладі даних, особливо опції, що змінюють порядок або видаляють рядки.

Підсумуйте цей пост за допомогою: