Команды Linux

Команда Bash Tac

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

Также известная как reverse cat, простая утилита командной строки, которая позволяет вам перевернуть строки в выводе с помощью | встроенный оператор трубы и tac. То есть, если у вас есть команда, левая часть (lhs), и вы хотите перевернуть содержимое ее вывода, все, что вам нужно сделать, это ввести lhs | такс. это оно!

По общему признанию, есть больше, чем кажется на первый взгляд. Не волнуйся. Мы все расскажем в свое время.

Консультации по tac

Использовать или не использовать, вот в чем вопрос. Вы не хотите, чтобы вы не хотели, когда вам не нужно. Однако, если вы хотите распространить такс как свою команду на хлеб с маслом, это зависит от вас. А пока вот мой совет о том, чтобы обе стороны оставались нейтральными.

Когда использовать tac

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

Когда вы не уверены в возможностях lhs

Многие команды, такие как sort, имеют возможность отменить вывод команды. Однако, если вы не уверены, есть ли в команде слева параметр -r для обратного вывода, использование tac - верный способ перевернуть выходные строки.

Когда производительность не имеет значения

Хотя это и незначительно, большинство команд, используемых в сочетании со встроенной опцией для обратного вывода, работают лучше, чем конвейерная передача вывода в tac. Так что, если небольшое отставание в производительности не является проблемой, можно подключиться к tac для воспроизведения вывода в обратном направлении.

Когда не использовать tac

Бывают случаи, когда вы не можете использовать tac, потому что вам лучше знать. Вот несколько замечаний.

Когда вы знаете, что команда на lhs имеет возможность перевернуть выходные строки

Как я уже сказал: «Большинство команд имеют возможность обратного вывода.”Если вы знаете, что у определенной команды lhs есть опция, вы не можете использовать tac. В конце концов, -r короче, чем - | такс.

Когда производительность имеет значение

Как я уже сказал, «использование реверса lhs может работать лучше, чем tac.«Если вы хотите выжать несколько секунд в сценарии bash или имеете дело с большими файлами, для чтения которых требуется время, вы можете не использовать tac.

Такси помощь

Выполнение команды help для tac или man tac показывает использование вместе с параметрами, которые могут быть использованы. Вот чего ожидать.

Команды

tac --help

Выход

Версия Tac

Какая у меня версия?
Вы последняя версия себя. Однако, в случае, какая версия у вашего tac, есть вариант для этого.

Команды

tac --version

Выход

Заметки

Если вы используете tac на FreeBSD или macOS, длинный вариант для версии может быть недоступен. В этом случае попробуйте -v или man tac. Если вы пробовали, дайте мне знать. мне интересно. Спасибо

Варианты Tac

Помимо справки и версии, у tac не так много опций. Что у него есть, вы обязательно узнаете, что tac - это не просто старая обратная кошка.

Такси перед вариантом

Параметр -b позволяет вам изменить способ прикрепления разделителя к выводу. По умолчанию разделитель новой строки добавляется после каждой строки.

Я знаю, что это сбивает с толку. Разберем это на примере.

Во-первых, давайте посмотрим, как выглядит наш вывод, прежде чем использовать tac -b.

Команды

seq 10

Выход

Теперь посмотрим, во что превратится наш вывод после использования tac без -b.

Команды

seq 10 | такс

Выход

Теперь давайте посмотрим, во что превратится вывод, используя tac -b.

Команды

seq 10 | tac -b

Выход

Опция разделителя Tac

Параметр разделителя -s 'literal string' позволяет указать символ или последовательность символов, используемых tac для разделения строк. По умолчанию используется символ новой строки ('0a' в шестнадцатеричном формате).

Как использовать опцию tac-сепаратора сначала не очевидно. Однако, как только вы узнаете, что он есть, трудно не попробовать его использовать.

Рассмотрим следующий пример, работающий со строками, представленными в шестнадцатеричном формате.

Команды

seq 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Выход

Заметки

(1) Это может показаться тривиальным, поскольку использование seq 20 | tac, однако в этом случае мы не тратили время на работу с выходным потоком в шестнадцатеричном формате. Использование этого шаблона полезно, когда разделение не является чем-то тривиальным, как символ новой строки, такой как нулевой байт.

Теперь меньше пытайтесь использовать tac для чего-то менее сырого и более мета, например простого HTML.

Рассмотрим следующий файл.

Файл

А
B
C

Команды

file () echo -e "А
B
C
";
файл | tac -s "
"

Выход

Нам удалось преобразовать HTML-страницу

А
B
C

в

C
B
А

используя tac.

Предположим, вам нужно сделать что-то более сложное, например, рассматривать любой тег как разделитель tac. В этом случае вам не удастся просто использовать только опцию разделителя. Вот где появляется опция регулярного выражения. В сочетании с опцией разделителя он позволяет вам делать с командой tac больше, чем перевернуть строку в файле. Вот как.

Параметр регулярного выражения Tac

Параметр регулярного выражения -r -s 'regex' позволяет указать, что строка-разделитель должна обрабатываться как регулярное выражение.

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

Рассмотрим предыдущий пример с использованием параметра регулярного выражения в сочетании с параметром разделителя. Пусть tac обрабатывает любой тег разметки как разделитель.

Файл



простые функции


Функции в bash просты. По крайней мере, это. Он помещает строку на экран.


Команды


простая функция
()
эхо
настолько просто, насколько это возможно простая функция

Источник: https: // temptemp3.github.io / bash-функции

Команды

файл ()

эхо '



простые функции

Функции в bash просты. По крайней мере, это. Это ставит
строка на экране.

Команды



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

(
)

эхо настолько просто, насколько это возможно

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

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

Выход

Нам удалось преобразовать HTML-страницу, обращая файл, используя HTML-теги. Если вы посмотрите на детали, то заметите, что он еще не идеален.

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

Вот примитивная версия реализации tac на чистом bash, которая меняет местами строки, переданные командой lhs. Будущие версии оставлены в качестве упражнения.

#!/ bin / bash
## tac
## версия 0.0.1 - начальная
##########################################################################
tac ()
местный -a arr
местный -i i
mapfile arr -
i = "$ # arr [@]"
а [$ i -ge 0]
делать
эхо $ arr [i]
пусть i- = 1
Выполнено

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

Источник: https: // github.com / temptemp3 / ba.ш / blob / мастер / tac.ш

Команда Tac с использованием других команд

Вот несколько примитивных версий реализации tac с использованием других команд, которые меняют местами строки, переданные командой lhs. Будущие версии оставлены в качестве упражнения.

Прежде чем мы начнем, закройте глаза и подумайте: «Что можно использовать для реализации примитивной версии tac??”
На ум приходит много команд, но я остановлюсь на тех, для которых у нас есть место.

таращиться

Подобно команде Tac в примере чистого bash, для реализации tac мы сначала сохраняем прочитанные строки, которые будут воспроизведены в обратном порядке после того, как все строки будут прочитаны. Вот как это будет выглядеть при использовании gawk.

 gawk 'line [++ line [0]] = $ (0) END for (i = 0; i

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

 seq 10 | gawk 'line [++ line [0]] = $ (0) END for (i = 0; i

Как и следовало ожидать, результат будет

Упражнения

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

TL; DR

Опять же, мне понравилось писать команду Bash tac. После прочтения я надеюсь, что вы согласитесь, что нужно сделать больше, чем вы думали. Кроме того, после попытки сделать что-то трудным в нижней части, я надеюсь, что вы знаете, насколько полезной может быть команда tac. Если кому-то удастся выполнить какое-либо из упражнений или ему понадобится помощь с домашним заданием, дайте мне знать. Спасибо,

Бесплатные движки с открытым исходным кодом для разработки игр для Linux
В этой статье будет рассмотрен список бесплатных игровых движков с открытым исходным кодом, которые можно использовать для разработки 2D- и 3D-игр в L...
Shadow of the Tomb Raider для Linux Учебное пособие
Shadow of the Tomb Raider - двенадцатое дополнение к серии Tomb Raider - франшизе приключенческой игры, созданной Eidos Montreal. Игра была очень хоро...
Как увеличить FPS в Linux?
FPS означает Кадров в секунду. Задача FPS - измерить частоту кадров при воспроизведении видео или во время игры. Проще говоря, количество непрерывных ...