Tiež známy ako reverzná mačka, tac jednoduchý nástroj príkazového riadku, ktorý vám umožní obrátiť riadky vo výstupe pomocou | zabudovaný operátor potrubia a tac. To znamená, že ak máte príkaz na ľavej strane (lhs) a chcete zvrátiť obsah jeho výstupu, stačí napísať lhs | tac. To je všetko!
Je pravda, že tac je toho viac, ako sa na prvý pohľad zdá. Neboj sa. Všetko to včas pokryjeme.
Poradenstvo v tac
To je alebo nie je na použitie, to je otázka. Nebudete chcieť nechcete tac, keď nemusíte. Ak však chcete rozložiť tac ako svoj príkaz na chlieb a maslo, je to na vás. Medzitým je tu moja rada o tom, aby obidve strany zostali neutrálne.
Kedy použiť tac
Sú chvíle, kedy použiť tac, ktoré vám pomôžu vyťažiť viac z príkazového riadku s menším počtom kódu a časom stráveným skúmaním možností príkazu lhs.
Keď si nie ste istí možnosťami lhs
Mnoho príkazov, ako napríklad sort, je dodávaných s možnosťou obrátiť výstup príkazu. Ak si však nie ste istí, či má príkaz na ľavej strane možnosť -r na obrátenie výstupu, použitie tac je bezpečný spôsob, ako obrátiť výstupné riadky.
Keď na výkone nezáleží
Aj keď je to nepodstatné, väčšina príkazov používaných v spojení so vstavanou možnosťou reverzného výstupu funguje lepšie ako prepájanie výstupu do tac. Takže ak nie je problém s malým oneskorením výkonu, zavedenie príkazu tac na opakované prehranie výstupu je v poriadku.
Kedy nepoužívať tac
Sú chvíle, kedy nemusíš použiť tac, pretože to vieš lepšie. Tu je niekoľko poznámok.
Keď viete, že príkaz na lhs má možnosť obrátiť výstupné riadky
Ako som už povedal: „Väčšina príkazov je vybavená možnosťou reverzného výstupu.„Ak viete, že konkrétny príkaz lhs má voľbu, nemusíte použiť tac. Koniec koncov, -r je kratšie ako - | tac.
Keď záleží na výkone
Ako som povedal: „Použitie možnosti reverzu lhs môže fungovať lepšie ako tac.„Ak hľadáte vytlačiť niekoľko sekúnd v bash skripte alebo pracujete s väčšími súbormi, ktoré si vyžadujú čas na prečítanie, nemusíte používať tac.
Tac pomoc
Spustenie príkazu pomoci pre tac alebo man tac zobrazí použitie spolu s možnosťami, ktoré môžu byť použité. Tu je to, čo môžete očakávať.
Príkazy
tac - pomocVýkon
Tac verzia
Aká som verzia?
Ste najnovšou verziou samého seba. V prípade verzie vašej verzie tac však existuje možnosť.
Príkazy
tac - verziaVýkon
Poznámky
Ak používate tac na FreeBSD alebo macOS, dlhá možnosť pre verziu nemusí byť k dispozícii. V takom prípade skúste -v alebo man tac. Ak ste to skúsili, dajte mi vedieť. som zvedavý. Vďaka
TAC možnosti
Okrem pomoci a verzie nemá tac veľa možností. Za to, čo má, určite zistíte, že tac nie je len tak hocijaká stará reverzná mačka.
Možnosť Tac before
Voľba -b umožňuje zmeniť spôsob pripojenia oddeľovača na výstupe. Štandardne je za každým riadkom pripojený oddeľovač nového riadku.
Viem, že je to mätúce. Poďme si to rozobrať na príklade.
Najprv sa pozrime, čo vyzerá náš výstup pred použitím tac -b.
Príkazy
seq 10Výkon
Teraz sa pozrime, na čo sa náš výstup zmení po použití tac bez -b.
Príkazy
nasl. 10 | tacVýkon
Teraz sa pozrime, na čo sa výstup zmení pomocou tac -b.
Príkazy
nasl. 10 | tac -bVýkon
Možnosť oddeľovača TAC
Voľba oddeľovača -s 'literal string' vám umožňuje určiť znak alebo postupnosť znakov, ktoré používa tac na rozlíšenie riadkov od seba. Predvolene sa používa znak nového riadku („0a“ v šestnástke).
Ako používať možnosť oddeľovača tac nie je spočiatku zrejmé. Keď však viete, že to tam je, je ťažké sa ho nepokúsiť použiť.
Uvažujme o nasledujúcom príklade, ktorý funguje na linkách znázornených v hex.
Príkazy
seq 20 | xxd -ps | tac -s '0a' | xxd -ps -rVýkon
Poznámky
(1) Môže sa to javiť ako triviálne, keď používate sekvenciu 20 | Príkaz tac sme však v takom prípade nestrávili čas prácou na výstupnom toku v hexadecimálnom formáte. Používanie tohto vzoru je užitočné, keď samostatná položka nie je triviálna ako nový znak riadku, napríklad nulový bajt.
Teraz už menej skúste použiť tac na niečo trochu menej surové a meta ako jednoduchý HTML.
Zvážte nasledujúci súbor.
Súbor
AB
C
Príkazy
file () echo -e "AB
C
";
súbor | tac -s "
„
Výkon
Podarilo sa nám previesť stránku HTML
AB
C
do
CB
A
pomocou tac.
Predpokladajme, že musíte urobiť niečo trochu komplikovanejšie, ako napríklad považovať každú značku za oddeľovač tac. V takom prípade sa vám len pomocou možnosti oddeľovača nevyhnete. To je miesto, kde prichádza možnosť regulárneho výrazu. V kombinácii s možnosťou oddeľovača vám umožní urobiť viac s príkazom tac ako obrátiť riadok v súbore. Tu je postup.
Možnosť Tac regex
Voľba regex -r -s 'regex' vám umožňuje určiť, že s oddeľovacím reťazcom sa má zaobchádzať ako s regulárnym výrazom.
Ako používať voľbu tac regex je také jednoduché ako pridať voľbu -r pred alebo za oddeľovač.
Zvážte predchádzajúci príklad použitia možnosti regex v kombinácii s možnosťou oddeľovača. Poďme s tac zaobchádzať s každou značkou ako s oddeľovačom.
Súbor
jednoduché funkcie
Funkcie sú jednoduché. Aspoň tento je. Vloží na obrazovku reťazec.
Príkazy
jednoduchá funkcia
()
ozvena
tak jednoduché, ako to len ide jednoduchá funkcia
Zdroj: https: // temptemp3.github.io / bash-funkcie
Príkazy
súbor ()ozvena
jednoduché funkcie
Funkcie sú jednoduché. Aspoň tento je. Kladie to a
reťazec na obrazovke.
Príkazy
jednoduchá funkcia
()
ozvena tak jednoduché, ako to len ide
jednoduchá funkcia
súbor | tac -r -s "] *.„
Výkon
Podarilo sa nám previesť stránku HTML, ktorá obrátila súbor pomocou značiek HTML. Ak sa pozriete do detailov, všimnete si, že to ešte nie je dokonalé.
Tac príkaz v čistom bashe
Toto je primitívna verzia implementácie tac v čistom bashe, ktorá obracia riadky privádzané príkazom lhs. Budúce verzie sú ponechané ako cvičenie.
#!/ bin / bash## tac
## verzia 0.0.1 - počiatočné
######################################################
tac ()
miestny -a arr
miestne -i i
arr. mapfile -
i = "$ # arr [@]"
while [$ i -ge 0]
robiť
echo $ arr [i]
nech i- = 1
hotový
#####################################################
tac
#####################################################
Zdroj: https: // github.com / temptemp3 / ba.sh / blob / master / tac.š
Príkaz Tac pomocou iných príkazov
Tu je niekoľko primitívnych verzií implementácie tac pomocou iných príkazov, ktoré obracajú riadky privádzané príkazom lhs. Budúce verzie sú ponechané ako cvičenie.
Než začneme, zatvorte oči a premýšľajte: „Čo by sa dalo použiť na implementáciu primitívnej verzie tac?“
Napadne ma veľa príkazov, ale zameriam sa na tie, pre ktoré máme priestor.
civieť
Podobne ako v príkaze Tac v príklade čistého bash, na implementáciu tac by sme najskôr po načítaní všetkých riadkov uložili prečítané riadky, ktoré sa majú prehrať opačne. Takto by to vyzeralo s použitím gawku.
gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Teraz skúste použiť na príkaze lhs seq 10.
nasl. 10 | gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Ako by ste čakali, výstup je
Cvičenia
1. Funkcia lhs () seq 10; vypíše celé čísla 1 až 10. Napíšte príkaz rhs tak, aby lhs | rhs sa rovná 10864213579 iba pri použití tac (Tip: pred príkladom možnosti pozri Tac)
2. Obrátiť výstup rhs () find -mindepth 1 -maxdepth 1 -print0; pomocou tac (Tip: pozri príklad možnosti oddeľovača Tac)
3. Predĺžiť tac.sh (v príkaze Tac v čistom bashe), aby sa správal presne ako tac. Budete musieť pridať možnosti a vyskúšať ich správanie.
4. Implementujte primitívnu verziu tac v čistom bashe ako rekurzívnu funkciu.
TL; DR
Opäť ma bavilo písať príkaz Bash tac. Po prečítaní dúfam, že môžete súhlasiť s tým, že je toho ešte veľa, ako ste si mysleli. Tiež dúfam, že keď sa pokúsite robiť veci úplne zdola, dúfam, že viete, aké užitočné by mohol byť príkaz tac. Ak sa niekomu podarí dokončiť ktorékoľvek z cvičení alebo potrebujete pomoc s domácimi úlohami, dajte mi vedieť. Vďaka,