Poznat i kao obrnuta mačka, tac jednostavan uslužni program naredbenog retka koji vam omogućuje preokretanje linija u izlazu pomoću | ugrađeni rukovatelj cijevi i tak. Odnosno, ako imate naredbu s lijeve strane (lhs) i želite preokrenuti sadržaj njezinog izlaza, sve što biste napravili je upisati lhs | tac. To je to!
Doduše, taktiranje je više nego što se čini na prvi pogled. Ne brinite. Sve ćemo pokriti, u svoje vrijeme.
Savjeti o taktu
Koristiti ili ne koristiti, to je pitanje. Nećete, ne želite hvatati kad ne morate. Međutim, ako želite širiti takse kao zapovijed kruha i maslaca, to ovisi o vama. U međuvremenu, evo mog savjeta o prihvaćanju obje strane da ostanu neutralne.
Kada koristiti tac
Postoje trenuci kada koristite tac koji vam pomaže da izvučete više iz naredbenog retka s manje koda i vremena provedenog u istraživanju lhs naredbenih opcija.
Kada niste sigurni u mogućnosti lhs-a
Mnoge naredbe poput sort dolaze s opcijom za preokret izlaza naredbe. Međutim, ako niste sigurni ima li naredba s lijeve strane -r opciju za preokretanje izlaza, upotreba taca siguran je način za preokretanje izlaznih linija.
Kad izvedba nije bitna
Iako beznačajne, većina naredbi korištenih zajedno s ugrađenom opcijom za preokretanje izlaza ima bolje rezultate od slanja izlaza u tac. Dakle, ako malo zaostajanje u izvedbi nije problem, ubacivanje u tac za ponovnu reprodukciju u obrnutom redu je u redu.
Kada ne koristiti tac
Postoje slučajevi kada možda nećete koristiti tac jer znate bolje. Evo nekoliko napomena.
Kada znate da naredba na lhs ima mogućnost preokretanja izlaznih linija
Kao što sam rekao, „Većina naredbi dolazi s opcijom obrnutog izlaza.”Ako znate da određena lhs naredba ima opciju, ne možete koristiti tac. Napokon, -r je kraći od - | tac.
Kad je izvedba bitna
Kao što sam rekao, „Korištenje opcije obrnutog lhs može biti bolje od takta.”Ako želite istisnuti nekoliko sekundi u bash skripti ili imate posla s većim datotekama kojima je potrebno vrijeme za čitanje, možda nećete koristiti tac.
Tac pomoć
Pokretanje naredbe pomoći za tac ili man tac prikazuje upotrebu zajedno s opcijama koje se mogu koristiti. Evo što možete očekivati.
Naredbe
tak - pomoćIzlaz
Tac verzija
Koja sam verzija?
Vi ste najnovija verzija sebe. Međutim, u slučaju koje je verzije vaš tac, postoji opcija za to.
Naredbe
tac --verzijaIzlaz
Bilješke
Ako koristite tac na FreeBSD ili macOS, duga opcija za verziju možda neće biti dostupna. U tom slučaju pokušajte s -v ili man tac. Ako ste probali, javite mi. ja sam znatiželjan. Hvala
Tac opcije
Pored pomoći i verzije, tac nema mnogo opcija. Sigurno ćete otkriti da tac nije bilo koja stara obrnuta mačka.
Tac prije opcije
Opcija -b omogućuje vam promjenu načina pričvršćivanja separatora u izlazu. Prema zadanim postavkama, razdvajač novog retka pridružen je nakon svakog retka.
Znam da je zbunjujuće. Razložimo to na primjeru.
Prvo, pogledajmo kako izgleda naš izlaz prije korištenja tac -b.
Naredbe
dalje 10Izlaz
Sada da vidimo u što se pretvara naš izlaz nakon upotrebe tac bez -b.
Naredbe
slijed 10 | tacIzlaz
Sada da vidimo u što se pretvara izlaz pomoću tac -b.
Naredbe
slijed 10 | tac -bIzlaz
Tac separator opcija
Opcija razdvajanja -s 'doslovni niz' omogućuje vam određivanje znaka ili niza znakova koje tac koristi za razdvajanje linija. Prema zadanim postavkama koristi se znak novog retka ('0a' u hex-u).
Kako se koristi opcija razdvajanja taca, isprva nije očito. Međutim, kad jednom znate da je tu, teško je ne pokušati ga koristiti.
Razmotrimo sljedeći primjer, operirajući na linijama predstavljenim u hex-u.
Naredbe
dalje 20 | xxd -ps | tac -s '0a' | xxd -ps -rIzlaz
Bilješke
(1) Moglo bi izgledati trivijalno kao kada se koristi seq. 20 | tac naredbu, međutim, u tom slučaju nismo trošili vrijeme radeći na izlaznom toku u hex-u. Korištenje ovog uzorka korisno je kada odvojeno nije nešto trivijalno kao znak nove crte, kao što je nulti bajt.
Sada manje pokušavajte koristiti tac za nešto malo manje sirovo i više meta poput jednostavnog HTML-a.
Razmotrite sljedeću datoteku.
Datoteka
AB
C
Naredbe
datoteka () echo -e "AB
C
";
datoteka | taktovi "
"
Izlaz
Uspjeli smo pretvoriti HTML stranicu
AB
C
u
CB
A
koristeći tac.
Pretpostavimo da trebate napraviti nešto malo složenije, poput tretiranja bilo koje oznake kao separatora taca. U tom slučaju, nećete se izvući samo korištenjem samo separatora. Tu dolazi opcija regularnog izraza. U kombinaciji s opcijom razdvajača omogućuje vam da naredbom tac učinite više nego da obrnete liniju u datoteci. Evo kako.
Tac regex opcija
Opcija regularnog izraza -r -s 'regex' omogućuje vam da odredite da se niz razdvajača tretira kao regularni izraz.
Kako koristiti opciju tac regularnog izraza jednostavno je poput dodavanja opcije -r prije ili poslije separatora.
Razmotrite prethodni primjer koristeći opciju regularnog izraza zajedno s opcijom razdvajanja. Neka se tac prema bilo kojoj označnoj oznaci odnosi kao prema razdvajaču.
Datoteka
jednostavne funkcije
Funkcije su jednostavne u bashu. Barem ovaj jest. Stavlja niz na ekran.
Naredbe
jednostavna funkcija
()
jeka
što jednostavnije postaje jednostavna funkcija
Izvor: https: // temptemp3.github.io / bash-funkcije
Naredbe
datoteka ()jeka '
jednostavne funkcije
Funkcije su jednostavne u bashu. Barem ovaj jest. To stavlja a
niz na ekranu.
Naredbe
jednostavna funkcija
()
jeka što jednostavnije postaje
jednostavna funkcija
datoteka | tac -r -s "] *."
Izlaz
Uspjeli smo pretvoriti HTML stranicu obrnutom datotekom pomoću HTML oznaka. Ako pogledate detalje, primijetit ćete da to još nije savršeno.
Tac naredba u čistom bashu
Evo primitivne verzije tac implementacije u pure bash koja preokreće linije unesene naredbom lhs. Buduće verzije ostavljene su kao vježba.
#!/ bin / bash## tak
## verzija 0.0.1 - početni
####################################################
tac ()
lokalno -a dol
mjesni -i i
mapfile dol -
i = "$ # arr [@]"
dok [$ i -ge 0]
čini
odjek $ arr [i]
neka je i- = 1
gotovo
####################################################
tac
####################################################
Izvor: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh
Tac naredba pomoću drugih naredbi
Evo nekoliko primitivnih verzija implementacije takta korištenjem drugih naredbi koje preokreću linije unesene naredbom lhs. Buduće verzije ostavljene su kao vježba.
Prije nego što započnemo, zatvorite oči i razmislite: „Što bi se moglo koristiti za primjenu primitivne verzije taksa?"
Mnoge zapovijedi mi padnu na pamet, ali usredotočit ću se na one za koje imamo mjesta.
budala
Slično naredbi Tac u primjeru čistog basha, da bismo implementirali tac, prvo bismo spremili retke čitanja da bi se reproducirali obrnuto nakon što se pročitaju sve linije. Evo kako bi to izgledalo pomoću gawka.
gawk 'linija [++ linija [0]] = $ (0) END za (i = 0; i
Sada pokušajte upotrijebiti naredbu lhs seq 10.
slijed 10 | gawk 'linija [++ linija [0]] = $ (0) END za (i = 0; i
Kao što biste očekivali, izlaz je
Vježbe
1. Funkcija lhs () seq 10; navodi cjelobrojne brojeve od 1 do 10. Napišite rhs naredbu takvu da je lhs | rhs je jednako 10864213579 samo koristeći tac (Savjet: pogledajte Tac prije primjera opcije)
2. Obrnuti izlaz rhs () pronađi-dubinu 1 -maxdepth 1 -print0; pomoću tac (Savjet: pogledajte primjer opcije razdvajača Tac)
3. Produžite tac.sh (u naredbi Tac u čistom bashu) da se ponaša točno kao tac. Morat ćete dodati opcije i provjeriti njihovo ponašanje.
4. Primijenite primitivnu verziju tac u pure bash kao rekurzivnu funkciju.
TL; DR
Opet sam uživao u pisanju naredbe Bash tac. Nakon čitanja nadam se da se možete složiti da se takta može više nego što ste mislili. Također, nakon pokušaja da stvari napravim na teži način pri dnu, nadam se da znate koliko bi tac naredba mogla biti korisna. Ako netko uspije odraditi bilo koju od vježbi ili zatreba pomoć oko domaće zadaće, javite mi. Hvala,