Известен също като обратна котка, tac проста помощна програма за команден ред, която ви позволява да обръщате редове в изхода с помощта на | вграден тръбен оператор и tac. Тоест, ако имате команда отляво (lhs) и искате да обърнете съдържанието на резултата от нея, всичко, което бихте направили, е да напишете lhs | tac. Това е!
Трябва да се признае, че има още какво да се лекува, отколкото изглежда на пръв поглед. Не се притеснявайте. Ще покрием всичко, своевременно.
Съвети относно tac
Да се използва или да не се използва, това е въпросът. Няма да не искаш да лепиш, когато не се налага. Ако обаче искате да разпространявате tac като ваша команда за хляб и масло, зависи от вас. Междувременно ето моят съвет за приемане на двете страни, за да останат толкова неутрални.
Кога да се използва tac
Има моменти, когато трябва да използвате tac, които ви помагат да извлечете повече от командния ред с по-малко код и време, прекарано в проучване на lhs командните опции.
Когато не сте сигурни за опциите на lhs
Много команди като сортиране идват с опция за обръщане на изхода на команда. Ако обаче не сте сигурни дали команда отляво има опция -r за обръщане на изхода, използването на tac е сигурен начин за обръщане на изходните линии.
Когато изпълнението няма значение
Макар и незначителни, повечето команди, използвани заедно с вградена опция за обръщане на изхода, се представят по-добре от извеждането на изхода към tac. Така че, ако малкото забавяне на производителността не е проблем, тръбопровода в tac за повторно възпроизвеждане на изхода в обратна посока е наред.
Кога да не се използва tac
Има моменти, в които може да не използвате tac, защото знаете по-добре. Ето няколко за отбелязване.
Когато знаете, че командата на lhs има опция за обръщане на изходните редове
Както казах, „Повечето команди идват с опция за обратен изход.”Ако знаете, че определена команда lhs има опция, не можете да използвате tac. В края на краищата, -r е по-кратък от - | tac.
Когато изпълнението има значение
Както казах, „Използването на lhs обратната опция може да се представи по-добре от tac.”Ако искате да изцедите няколко секунди в bash скрипт или имате работа с по-големи файлове, които изискват време за четене, може да не използвате tac.
Tac помощ
Изпълнението на командата за помощ за tac или man tac показва използването заедно с опциите, които могат да бъдат използвани. Ето какво да очаквате.
Команди
tac --помощИзход
Tac версия
Каква версия съм?
Вие сте най-новата версия на себе си. Въпреки това, в случая с каква версия е вашият tac, има опция за това.
Команди
tac --версияИзход
Бележки
Ако използвате tac на FreeBSD или macOS, дългата опция за версия може да не е налична. В този случай опитайте -v или man tac. Ако сте го опитали, кажете ми. Любопитен съм. Благодаря
Tac опции
Освен помощ и версия, tac няма много опции. За това, което има, със сигурност ще разберете, че tac не е просто някаква стара обратна котка.
Опция Tac before
Опцията -b ви позволява да промените начина на закрепване на разделителя в изхода. По подразбиране разделителят за нов ред е прикрепен след всеки ред.
Знам, че е объркващо. Нека да го разделим чрез пример.
Първо, нека видим как изглежда нашият изход, преди да използваме tac -b.
Команди
сл. 10Изход
Сега нека видим в какво се превръща изходът ни след използване на tac без -b.
Команди
сл. 10 | tacИзход
Сега нека видим в какво се превръща изходът, използвайки tac -b.
Команди
сл. 10 | tac -bИзход
Опция за разделяне на Tac
Опцията за разделител -s 'буквален низ' ви позволява да посочите символа или последователността от символи, използвани от tac за разграничаване на редовете. По подразбиране се използва символът за нов ред ('0a' в шестнадесетичен знак).
Начинът на използване на опцията за разделяне на тач в началото не е очевиден. След като знаете обаче, че е там, е трудно да не се опитате да го използвате.
Да разгледаме следния пример, работещ върху линии, представени в шестнадесетичен.
Команди
сл. 20 | xxd -ps | tac -s '0a' | xxd -ps -rИзход
Бележки
(1) Може да изглежда тривиално, като се използва последователността 20 | tac команда, но в този случай не отделяхме време за работа върху изходния поток в шестнадесетичен. Използването на този модел е полезно, когато разделянето не е нещо тривиално като новия ред, като нулевия байт.
Сега по-малко се опитвайте да използвате tac за нещо малко по-малко сурово и повече мета като прост HTML.
Обмислете следния файл.
Файл
AБ
° С
Команди
файл () echo -e "AБ
° С
";
файл | tac -s "
"
Изход
Успяхме да конвертираме HTML страницата
AБ
° С
в
° СБ
A
с помощта на tac.
Да предположим, че трябва да направите нещо малко по-сложно, като да третирате всеки етикет като разделител на тач. В този случай няма да се измъкнете, като използвате само опцията за разделяне. Тук идва опцията за регулярно изражение. В комбинация с опцията за разделител ви позволява да направите повече с командата tac, отколкото да обърнете ред във файл. Ето как.
Tac regex опция
Опцията за регулярно изражение -r -s 'regex' ви позволява да посочите, че разделителният низ трябва да се третира като регулярен израз.
Как да използвате опцията tac regex е толкова просто, колкото добавянето на опцията -r преди или след разделителя.
Помислете за предишния пример, като използвате опцията за регулярно изражение заедно с опцията за разделяне. Нека да разгледаме всеки маркер за маркиране като разделител.
Файл
прости функции
Функциите са прости в bash. Поне този е. Поставя низ на екрана.
Команди
проста функция
()
ехо
толкова просто, колкото става проста функция
Източник: https: // temptemp3.github.io / bash-функции
Команди
файл ()ехо
прости функции
Функциите са прости в bash. Поне този е. Той поставя a
низ на екрана.
Команди
проста функция
()
ехо толкова просто, колкото става
проста функция
файл | tac -r -s "] *."
Изход
Успяхме да конвертираме HTML страницата, обръщаща файла, използвайки HTML тагове. Ако разгледате подробностите, ще забележите, че все още не е перфектно.
Tac команда в чист bash
Ето примитивна версия на tac изпълнение в чист bash, която обръща редовете, въведени от команда lhs. Бъдещите версии са оставени като упражнение.
#!/ bin / bash## tac
## версия 0.0.1 - начален
####################################################
tac ()
местно -а обр
местно -i i
mapfile обр -
i = "$ # arr [@]"
докато [$ i -ge 0]
направете
ехо $ arr [i]
нека i- = 1
Свършен
####################################################
tac
####################################################
Източник: https: // github.com / temptemp3 / ba.sh / blob / master / tac.ш
Tac команда, използваща други команди
Ето някои примитивни версии на tac изпълнение, използващи други команди, които обръщат редовете, въведени от lhs команда. Бъдещите версии са оставени като упражнение.
Преди да започнем, затворете очи и си помислете: „Какво може да се използва за прилагане на примитивна версия на tac?”
Много команди ми идват на ум, но ще се спра на тези, за които имаме място.
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 () sq 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 в pure bash като рекурсивна функция.
TL; DR
Отново ми хареса да пиша командата Bash tac. След като прочетох, надявам се, че можете да се съгласите, че има още какво да се направи, отколкото сте предполагали. Освен това, след като се опитахте да направите нещата по трудния начин отдолу, надявам се, че знаете колко полезна може да бъде командата tac. Ако някой успее да изпълни някое от упражненията или се нуждае от помощ за домашните си, да ме уведоми. Благодаря,