Утиліта Linux rev
обробляє текстові рядки, повертаючи їх у зворотному порядку. Ця команда може працювати як з введеним текстом, так і з файлами, і на перший погляд може здаватися простою. Однак, як і багато інших інструментів командного рядка, її справжня потужність розкривається в поєднанні з іншими командами.
Команда rev
– це одна з тих нескладних Linux-утиліт, котра може викликати подив. Її єдина функція – це обертання рядків. Крім можливості відображення короткої довідки (ключ -h
) та виведення номера версії (ключ -V
), вона не приймає жодних додаткових параметрів.
Отже, rev
просто перевертає рядки? Без жодних варіацій чи додаткових функцій? І так, і ні. Так, вона не має налаштувань, але ні, цим її можливості не обмежуються. У цій статті ми розглянемо, як її можна використовувати для виконання потужних операцій.
Коли rev
використовується як елемент у більш складних ланцюжках команд, її цінність стає очевидною. rev
входить до групи команд (таких як tac
і yes
), які є своєрідними посередниками. Їхню користь легше оцінити, побачивши, як вони допомагають ефективніше використовувати інші команди.
Застосування команди rev
Якщо запустити rev
без додаткових опцій, вона буде приймати введений текст, обертати його, і виводити результат у вікні термінала. Цей процес триватиме, доки ви не натиснете комбінацію клавіш Ctrl+C для виходу.
rev
Після введення тексту та натискання Enter, rev
виведе цей рядок у зворотному порядку, якщо тільки ви не введете паліндром.
Передача тексту до rev
Для передачі тексту до rev
можна використовувати команду echo
.
echo one two three | rev
Також rev
можна використовувати для обробки вмісту текстового файлу, рядок за рядком. У цьому прикладі є файл зі списком назв файлів. Назва файлу – “filelist.txt”.
rev filelist.txt
Кожен рядок з файлу зчитується, обертається, і виводиться у вікні термінала.
Поєднання rev з іншими командами
Розглянемо приклад використання конвеєрного введення, де команда rev
викликається двічі.
Ця команда видаляє останній символ з текстового рядка. Це може бути корисно для видалення знаків пунктуації. Нам знадобиться команда cut
для видалення символу.
echo 'Remove punctuation.' | rev | cut -c 2- | rev
Розберемо цей приклад покроково:
echo
відправляє рядок на перший виклик rev
.
rev
обертає рядок і передає його на cut
.
Параметр -c
(символи) вказує cut
повернути послідовність символів з рядка.
Параметр 2-
вказує cut
повернути діапазон символів від другого символу до кінця рядка. Якщо задати друге число, наприклад 2-5
, діапазон буде від другого до п’ятого символу. Відсутність другого числа означає “до кінця рядка”.
Обернений рядок – за винятком першого символу – передається в rev
, яка повертає рядок у початковий порядок.
Оскільки ми обрізали перший символ перевернутого рядка, ми фактично обрізали останній символ початкового рядка. Так, це можна зробити за допомогою sed
або awk
, але це простіший синтаксис.
Виокремлення останнього слова
Можна використати схожий прийом, щоб вивести останнє слово з рядка.
Команда нагадує попередню: вона знову використовує rev
двічі. Відмінність полягає у тому, як команда cut
використовується для виділення частин тексту.
echo 'Separate the last word' | rev | cut -d' ' -f1 | rev
Ось розбір команд:
echo
відправляє рядок на перший виклик rev
.
rev
обертає рядок і передає його на cut
.
Параметр -d' '
(роздільник) вказує cut
повертати послідовність символів, розділених пробілом.
Параметр -f1
вказує cut
повернути перший розділ рядка, який не містить роздільника. Іншими словами, від початку рядка до першого пробілу.
Обернене перше слово передається в rev
, яка повертає його у вихідний порядок.
Оскільки ми витягли перше слово з перевернутого рядка, ми фактично виокремили останнє слово з початкового рядка. Останнім словом речення було “word”, і воно було виведено.
Видалення вмісту з файлів
Припустимо, у нас є файл, що містить список назв файлів, де ці назви взяті в лапки. Нам потрібно видалити лапки з назв файлів.
Подивимося на вміст файлу:
less filelist.txt
Вміст файлу відображається за допомогою less
.
Можна видалити розділові знаки з обох кінців кожного рядка за допомогою наступної команди. Ця команда двічі використовує як rev
, так і cut
.
rev filelist.txt | cut -c 2- | rev | cut -c 2-
Назви файлів тепер відображаються без лапок.
Команда працює наступним чином:
rev
перевертає рядки з файлу і передає їх на cut
.
Параметр -c
(символи) вказує cut
повертати послідовність символів з кожного рядка.
Параметр 2-
вказує cut
повертати діапазон символів від другого до кінця кожного рядка.
Перевернуті рядки, за винятком перших символів, передаються в rev
.
rev
повертає рядки назад, щоб вони повернулися до початкового порядку. Потім вони знову обрізаються.
Параметр -c
(символи) вказує cut
повертати послідовність символів з кожного рядка.
Параметр 2-
вказує cut
повертати діапазон символів від другого до кінця кожного рядка. Це пропускає провідну лапку, яка є першим символом у кожному рядку.
Ланцюжки команд
Розглянемо команду, що повертає відсортований список усіх розширень файлів у поточному каталозі. Вона використовує п’ять різних команд Linux.
ls | rev | cut -d'.' -f1 | rev | sort | uniq
Процес простий:
ls
виводить список файлів у поточному каталозі. Він передається до rev
.
rev
обертає назви файлів і передає їх на cut
.
cut
повертає першу частину кожної назви файлу до роздільника. -d'.'
вказує cut
використовувати крапку “.” як роздільник. Частина перевернутих назв файлів до першої крапки – це розширення файлів. Вони передаються до rev
.
rev
повертає розширення файлів у вихідний порядок. Вони передаються до sort
.
sort
сортує розширення файлів і передає результати до uniq
.
uniq
повертає один екземпляр кожного унікального розширення файлу. Зверніть увагу, що якщо розширення немає (наприклад, для make-файлу та каталогів Help і gc_help), у списку буде повна назва файлу.
Щоб додати підрахунок, додайте параметр командного рядка -c
(count) до команди uniq
.
ls | rev | cut -d'.' -f1 | rev | sort | uniq -c
Тепер ми отримуємо відсортований список різних типів файлів у поточному каталозі з кількістю кожного.
Це досить елегантний однорядковий скрипт!
Рух вперед через назад
Іноді для руху вперед потрібно рухатися назад. Зазвичай рух вперед відбувається швидше, якщо це частина команди.
Додайте rev
до вашого набору інструментів командного рядка, і незабаром ви будете використовувати її для спрощення складних команд.