Команди Linux

Команда Bash Tac

Команда Bash Tac
Tac - одна з тих команд, яку ви не усвідомлюєте, поки вже не пішли і не зробили цього, не переобладнавши колесо, що не рідкість у програмуванні, незалежно від того, вивчаєте ви мотузки, чи професіонал з багаторічним досвідом похвались, ти чудовий. Якщо ваші руки чисті, то добре вам; У будь-якому випадку, вас чекає частування, я збираюся вивантажити все, що знаю про команду tac та багато іншого. Читайте далі.

Також відомий як зворотний кіт, tac - проста утиліта командного рядка, яка дозволяє зворотно змінювати рядки на виході за допомогою | вбудований оператор труби та тач. Тобто, якщо у вас є команда, ліва сторона (lhs), і ви хочете змінити вміст її результату, все, що вам потрібно зробити, це ввести lhs | так. Це воно!

Слід визнати, що в такті є більше, ніж на око. Не хвилюйся. Ми все це викладемо, вчасно.

Поради щодо тактики

Використовувати чи не використовувати, ось у чому питання. Ви не хочете, щоб ви не хотіли брати участь, коли вам не потрібно. Однак, якщо ви хочете поширювати tac як свою команду хліба та масла, це залежить від вас. Тим часом, ось моя порада щодо прийняття обох сторін як і раніше нейтральних.

Коли використовувати tac

Бувають випадки, коли потрібно використовувати tac, які допомагають отримати більше результатів у командному рядку з меншим кодом та витратою часу на дослідження параметрів команди lhs.

Коли ви не впевнені у варіантах lhs

Багато команд, таких як сортування, мають опцію зворотного виводу команди. Однак, якщо ви не впевнені, чи є в команді ліворуч опція -r для зворотного виводу, використання tac - це надійний спосіб змінити вихідні рядки.

Коли продуктивність не має значення

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

Коли не використовувати tac

Бувають випадки, коли ви не можете використовувати tac, тому що знаєте краще. Ось кілька, на які слід звернути увагу.

Коли ви знаєте, команда на lhs має опцію зворотного виведення рядків

Як я вже сказав, «Більшість команд мають опцію зворотного виводу.”Якщо ви знаєте, що конкретна команда lhs має опцію, ви не можете використовувати tac. Зрештою, -r коротший за - | так.

Коли продуктивність має значення

Як я вже казав, «Використання опції lhs reverse може мати кращі результати, ніж tac.”Якщо ви хочете вижати кілька секунд у скрипті bash або маєте справу з великими файлами, для читання яких потрібен час, ви не можете використовувати tac.

Tac допомога

Запуск команди довідки для tac або man tac показує використання разом із параметрами, які можуть бути використані. Ось чого чекати.

Команди

tac --допомога

Вихідні дані

Tac версія

Яка я версія?
Ви остання версія себе. Однак у випадку, яку версію має ваш tac, є варіант для цього.

Команди

tac --версія

Вихідні дані

Примітки

Якщо ви використовуєте tac на FreeBSD або macOS, довга опція для версії може бути недоступною. У такому випадку спробуйте -v або man tac. Якщо ви пробували, дайте мені знати. мені цікаво. Дякую

Варіанти Tac

Окрім довідки та версії, tac не має багато варіантів. Незважаючи на те, що він є, ви обов'язково дізнаєтесь, що tac - це не просто будь-яка стара зворотна кішка.

Tac перед варіантом

Параметр -b дозволяє змінити спосіб підключення роздільника на виході. За замовчуванням роздільник нового рядка приєднується після кожного рядка.

Я знаю, що це бентежить. Давайте розберемо це на прикладі.

Спочатку давайте подивимось, як виглядає наш результат, перш ніж використовувати tac -b.

Команди

наступні 10

Вихідні дані

Тепер давайте подивимося, в що перетворюється наш результат після використання tac без -b.

Команди

наступні 10 | так

Вихідні дані

А тепер давайте подивимось, у що перетворюється вихід, використовуючи tac -b.

Команди

наступні 10 | tac -b

Вихідні дані

Опція роздільника Tac

Параметр роздільника -s 'буквальний рядок' дозволяє вказати символ або послідовність символів, використовуваних tac для розмежування рядків. За замовчуванням використовується символ нового рядка ('0a' у шістнадцятковій формі).

Спосіб використання роздільника тактів спочатку не очевидний. Однак, як тільки ти дізнаєшся, що він є, важко не спробувати його використати.

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

Команди

наступні 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Вихідні дані

Примітки

(1) Це може здатися тривіальним, оскільки використання наступних 20 | tac, однак, у цьому випадку ми не витрачали час на роботу над вихідним потоком у шістнадцятковій формі. Використання цього шаблону корисно, коли відокремлений не є чимось тривіальним, як символ нового рядка, наприклад нульовий байт.

Тепер менше намагайтеся використовувати tac на чомусь трохи менш необробленому та більш мета, як простий HTML.

Розглянемо наступний файл.

Файл

A
B
C

Команди

file () echo -e "A
B
C
";
файл | так "
"

Вихідні дані

Нам вдалося перетворити HTML-сторінку

A
B
C

в

C
B
A

використовуючи такт.

Припустимо, вам потрібно зробити щось дещо складніше, наприклад, розглядати будь-який тег як роздільник тактів. У цьому випадку ви не збираєтеся врятуватися лише одним лише варіантом роздільника. Саме тут з’являється варіант регулярного виразу. У поєднанні з опцією роздільника це дозволяє зробити більше за допомогою команди tac, ніж змінити рядок у файлі. Ось як.

Опція регулярного виразу Tac

Параметр регулярного виразу -r -s 'регулярний вираз' дозволяє вказати, що рядок-роздільник повинен розглядатися як регулярний вираз.

Як використовувати параметр регулярного виразу tac так само просто, як додати параметр -r до або після роздільника.

Розглянемо попередній приклад, використовуючи параметр регулярного виразу разом із варіантом роздільника. Давайте розглянемо будь-який тег розмітки як роздільник.

Файл



прості функції


Функції в bash прості. Принаймні цей є. Він виводить рядок на екран.


Команди


проста функція
()
відлуння
як просто проста функція

Джерело: https: // temptemp3.github.io / bash-функції

Команди

файл ()

ехо '



прості функції

Функції в bash прості. Принаймні цей є. Це ставить
рядок на екрані.

Команди



проста функція

(
)

відлуння як просто

проста функція
'

файл | tac -r -s "] *."

Вихідні дані

Нам вдалося перетворити HTML-сторінку, обернувши файл назад за допомогою тегів HTML. Якщо ви заглянете в деталі, то помітите, що це ще не ідеально.

Команда Tac в чистому bash

Ось примітивна версія реалізації tac у чистому bash, яка перевертає рядки, введені командою lhs. Майбутні версії залишаються як вправа.

#!/ bin / bash
## tac
## версія 0.0.1 - початковий
####################################################
tac ()
місцевий -а обр
місцевий -і я
mapfile обр -
i = "$ # arr [@]"
в той час як [$ i -ge 0]
робити
echo $ arr [i]
нехай i- = 1
зроблено

####################################################
так
####################################################

Джерело: https: // github.com / temptemp3 / ba.sh / blob / master / tac.ш

Команда Tac з використанням інших команд

Ось кілька примітивних версій реалізації tac з використанням інших команд, які зворотно змінюють рядки, введені командою lhs. Майбутні версії залишаються як вправа.

Перш ніж розпочати, закрийте очі і подумайте: «Що можна використати для реалізації примітивної версії так?"
Багато команд приходять мені на думку, але я зупинюсь на тих, для яких у нас є місце.

gawk

Подібно до команди Tac у прикладі чистого bash, для реалізації tac ми спочатку зберігаємо прочитані рядки для відтворення в зворотному порядку після прочитання всіх рядків. Ось як це виглядало б за допомогою gawk.

 gawk 'рядок [++ рядок [0]] = $ (0) END для (i = 0; i

Тепер спробуйте використати команду lhs seq 10.

 наступні 10 | gawk 'рядок [++ рядок [0]] = $ (0) END для (i = 0; i

Як і слід було очікувати, результат є

Вправи

1. Функція lhs () наступні 10; перераховує цілі числа від 1 до 10. Випишіть команду rhs таку, що lhs | rhs дорівнює 10864213579 лише з використанням tac (Підказка: див. Tac перед прикладом варіанту)
2. Зворотній вивід rhs () find -mindepth 1 -maxdepth 1 -print0; за допомогою tac (Підказка: див. приклад опції роздільника Tac)
3. Розширити такт.sh (у команді Tac у чистому bash) поводитись точно так само, як tac. Вам потрібно буде додати параметри та обов’язково перевірити їх поведінку.
4. Реалізуйте примітивну версію tac у чистому bash як рекурсивну функцію.

TL; DR

Знову ж мені сподобалося писати команду Bash tac. Прочитавши, я сподіваюся, що ви можете погодитися з тим, що можна взяти більше, ніж ви думали. Крім того, після спроби зробити все важко внизу, я сподіваюся, ви знаєте, наскільки корисною може бути команда tac. Якщо комусь вдається виконати будь-яку з вправ або потрібна допомога у виконанні домашнього завдання, дайте мені знати. Дякую,

Найкращі лабораторні ігри Oculus App
Якщо ви є власником гарнітури Oculus, то вам потрібно дізнатися про бокове завантаження. Бокове завантаження - це процес встановлення негарнітного вмі...
Top 10 Games to Play on Ubuntu
Windows platform has been one of the dominating platforms for gaming because of the huge percentage of games that are developing today to natively sup...
5 найкращих аркадних ігор для Linux
В наш час комп’ютери - це серйозні машини, що використовуються для ігор. Якщо ви не можете отримати новий високий бал, ви зрозумієте, що я маю на уваз...