Znan tudi kot povratna mačka, tac je preprost pripomoček za ukazno vrstico, ki omogoča obračanje vrstic v izhodu z uporabo | vgrajeni upravljavec cevi in tac. To pomeni, da če imate ukaz na levi strani (lhs) in želite obrniti vsebino njegovega izhoda, morate le vpisati lhs | tac. To je to!
Resda je takta več, kot se zdi na prvi pogled. Ne skrbi. Vse bomo pokrili, pravočasno.
Nasveti glede tac
Uporabljati ali ne uporabljati, je to vprašanje. Ne boste, ne želite, da se tacnete, ko vam ni treba. Če pa želite tac širiti kot ukaz za kruh in maslo, je odvisno od vas. Medtem je tu moj nasvet, kako naj se obe strani zavzameta za nevtralnost.
Kdaj uporabiti tac
Včasih je treba uporabiti tac, s pomočjo katerega boste dobili več iz ukazne vrstice z manj kode in porabljenega časa za raziskovanje ukaznih možnosti lhs.
Ko niste prepričani o možnostih lhs
Številni ukazi, kot je razvrščanje, imajo možnost razveljavitve izhoda ukaza. Če pa niste prepričani, ali ima ukaz na levi strani možnost -r za obračanje izhoda, je uporaba tac zanesljiv način za obračanje izhodnih vrstic ali ne.
Kadar uspešnost ni pomembna
Čeprav so nepomembni, večina ukazov, uporabljenih v povezavi z vgrajeno možnostjo povratnega izhoda, deluje boljše kot cevovod izhoda v tac. Torej, če malo zaostajanja v zmogljivosti ni težava, je vstavljanje v tac za predvajanje izhodov v obratni smeri v redu.
Kdaj ne uporabljati tac
Včasih ne smete uporabljati tac, ker veste bolje. Tukaj je nekaj opozoriti.
Ko veste, ima ukaz na lhs možnost obrniti izhodne vrstice
Kot sem rekel, »Večina ukazov ima možnost povratnega izpisa.”Če veste, da ima določen ukaz lhs možnost, ne smete uporabljati tac. Navsezadnje je -r krajši od - | tac.
Ko je uspešnost pomembna
Kot sem rekel, »Uporaba lhs vzvratne možnosti je lahko boljša od tac."Če želite v bashovem skriptu iztisniti nekaj sekund ali imate opravka z večjimi datotekami, ki potrebujejo čas za branje, morda ne boste uporabili tac.
Tac pomoč
Zagon ukaza za pomoč za tac ali man tac prikazuje uporabo skupaj z možnostmi, ki jih je mogoče uporabiti. Tukaj lahko pričakujete.
Ukazi
tac --pomočIzhod
Tac različica
Kakšna različica sem?
Ste zadnja različica sebe. Vendar v primeru, katera različica je vaš tac, obstaja možnost za to.
Ukazi
tac --verzijaIzhod
Opombe
Če uporabljate tac na FreeBSD ali macOS, dolga možnost za različico morda ne bo na voljo. V tem primeru poskusite -v ali man tac. Če ste poskusili, mi sporočite. radoveden sem. Hvala
Tac možnosti
Poleg pomoči in različice tac nima veliko možnosti. Za to, kar ima, boste zagotovo ugotovili, da tac ni le katera koli stara mačka nazaj.
Možnost takta pred
Možnost -b vam omogoča, da spremenite način pritrditve ločila na izhodu. Ločnica nove vrstice je privzeto priložena za vsako vrstico.
Vem, da je zmedeno. Razčlenimo ga na primeru.
Najprej poglejmo, kako izgleda naš izhod, preden uporabimo tac -b.
Ukazi
10. zaporedIzhod
Zdaj pa poglejmo, v kaj se spremeni naš izhod po uporabi tac brez -b.
Ukazi
zaporedje 10 | tacIzhod
Zdaj pa poglejmo, v kaj se rezultat spremeni s pomočjo tac -b.
Ukazi
zaporedje 10 | tac -bIzhod
Možnost ločevanja tac
Možnost ločila -s 'dobesedni niz' vam omogoča, da določite znak ali zaporedje znakov, ki jih tac uporablja za ločevanje vrstic. Privzeto se uporablja znak nove vrstice ('0a' v šestnajstiškem znaku).
Kako uporabiti možnost ločevanja tac, sprva ni očitno. Ko pa enkrat veste, da je tam, ga težko ne poskusite uporabiti.
Razmislite o naslednjem primeru, ki deluje na črte, predstavljene v šestnajstiški vrstici.
Ukazi
zaporedje 20 | xxd -ps | tac -s '0a' | xxd -ps -rIzhod
Opombe
(1) Zdi se nepomembno, če bi uporabili naslednjo 20 | ukaz tac, vendar v tem primeru nismo porabili časa za delo z izhodnim tokom v hex. Uporaba tega vzorca je koristna, kadar ločeno ni nekaj trivialnega, kot je znak nove vrstice, na primer ničli bajt.
Zdaj manj poskusite uporabiti tac za nekaj malo manj surovega in bolj meta, kot je preprost HTML.
Razmislite o naslednji datoteki.
mapa
AB
C
Ukazi
datoteka () echo -e "AB
C
";
datoteka | tac-s "
"
Izhod
Uspelo nam je pretvoriti stran HTML
AB
C
v
CB
A
z uporabo tac.
Recimo, da morate narediti nekaj bolj zapletenega, na primer katero koli oznako obravnavati kot ločilo tac. V tem primeru se ne boste izognili samo uporabi možnosti ločevanja. Tu pride možnost regex. V kombinaciji z ločevalno možnost vam omogoča, da z ukazom tac naredite več kot vrnete vrstico v datoteki. Evo kako.
Tac možnost regularnega izraza
Z možnostjo regularnega izraza -r -s 'regex' lahko določite, da naj bo ločevalni niz obravnavan kot regularni izraz.
Kako uporabiti možnost tac regex je tako preprosto, kot da dodate možnost -r pred ali za ločevalnikom.
Razmislite o prejšnjem primeru z uporabo možnosti regularnega izraza v povezavi z možnostjo ločevanja. Naj tac vsako označno oznako obravnava kot ločilo.
mapa
preproste funkcije
Funkcije so v bash preproste. Vsaj ta je. Na zaslon postavi niz.
Ukazi
enostavna funkcija
()
odmev
čim bolj preprosto enostavna funkcija
Vir: https: // temptemp3.github.io / bash-funkcije
Ukazi
mapa ()odmev
preproste funkcije
Funkcije v bash so preproste. Vsaj ta je. Postavlja a
niz na zaslonu.
Ukazi
enostavna funkcija
()
odmev čim bolj preprosto
enostavna funkcija
datoteka | tac -r -s "] *."
Izhod
Uspelo nam je pretvoriti stran HTML, ki je datoteko obrnila, z uporabo oznak HTML. Če pogledate podrobnosti, boste opazili, da še ni popoln.
Tac ukaz v čisti bash
Tu je primitivna različica izvedbe tac v pure bash, ki obrne vrstice, ki jih vnese ukaz lhs. Prihodnje različice so ostale kot vaja.
#!/ bin / bash## tac
## različica 0.0.1 - začetnica
####################################################
tac ()
krajevno -pr
lokalni -i i
mapfile arr -
i = "$ # arr [@]"
medtem ko [$ i -ge 0]
naredi
echo $ arr [i]
naj bo i- = 1
Končano
####################################################
tac
####################################################
Vir: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh
Tac ukaz z uporabo drugih ukazov
Tu je nekaj primitivnih različic izvedbe tac z uporabo drugih ukazov, ki obrnejo vrstice, ki jih vnese ukaz lhs. Prihodnje različice so ostale kot vaja.
Preden začnemo, zaprite oči in pomislite: »Kaj bi lahko uporabili za izvedbo primitivne različice tac?"
Na misel mi pride veliko ukazov, osredotočil pa se bom na tiste, za katere imamo prostor.
gawk
Podobno kot ukaz Tac v primeru čistega basha, bi za izvajanje taca najprej shranili prebrane vrstice, ki jih je treba predvajati v obratni smeri, potem ko so prebrane vse vrstice. Tukaj je, kako bi bilo videti z uporabo gawk.
gawk 'vrstica [++ vrstica [0]] = $ (0) END za (i = 0; i
Zdaj poskusite uporabiti ukaz lhs seq 10.
zaporedje 10 | gawk 'vrstica [++ vrstica [0]] = $ (0) END za (i = 0; i
Kot bi pričakovali, je rezultat
Vaje
1. Funkcija lhs () naslednja 10; navaja cela števila od 1 do 10. Napišite ukaz rhs tako, da je lhs | rhs je enako 10864213579 samo z uporabo tac (Namig: glej Tac pred primerom možnosti)
2. Obrni izhod rhs () najdi -mindepth 1 -maxdepth 1 -print0; z uporabo tac (Namig: glej primer možnosti ločila tac)
3. Podaljšajte tac.sh (v ukazu Tac v čistem bashu), da se obnaša točno tako. Dodati boste morali možnosti in preizkusiti njihovo vedenje.
4. Izvedite primitivno različico tac v pure bash kot rekurzivno funkcijo.
TL; DR
Spet sem užival pri pisanju ukaza Bash tac. Po branju upam, da se lahko strinjate, da je takta še več, kot ste mislili. Tudi po tem, ko poskušam narediti nekaj na dnu, upam, da veste, kako koristen bi bil ukaz tac. Če komu uspe opraviti katero od vaj ali potrebuje pomoč pri domačih nalogah, mi to sporočite. Hvala,