Pazīstams arī kā reverse cat, tac vienkārša komandrindas utilīta, kas ļauj mainīt izejas rindas, izmantojot | iebūvēts cauruļu operators un tac. Tas ir, ja jums ir komanda kreisajā pusē (lhs) un vēlaties mainīt tā izvades saturu, viss, ko jūs darītu, ir rakstīt lhs | tac. Tieši tā!
Jāatzīst, ka takā ir kas vairāk, nekā šķiet. Neuztraucieties. Mēs to visu nokārtosim savlaicīgi.
Ieteikumi par tac
Lietot vai nelietot, tas ir jautājums. Jūs nevēlaties, lai tac, kad jums tas nav jādara. Tomēr, ja vēlaties izplatīt tac kā maizes un sviesta komandu, tas ir atkarīgs no jums. Tikmēr šeit ir mans padoms par tac abām pusēm, lai saglabātu tikpat neitrālu attieksmi.
Kad lietot tac
Ir gadījumi, kad jāizmanto tac, kas palīdz komandrindā iegūt vairāk, izmantojot mazāk kodu un laiku, kas pavadīts lhs komandu opciju izpētē.
Kad neesat pārliecināts par lhs iespējām
Daudzām komandām, piemēram, kārtot, ir iespēja mainīt komandas izvadi. Tomēr, ja neesat pārliecināts, vai komandai kreisajā pusē ir -r opcija mainīt izvadi, tac ir drošs veids, kā mainīt izejas līnijas.
Kad sniegumam nav nozīmes
Lai gan nenozīmīgi, lielākā daļa komandu, kas tiek izmantotas kopā ar iebūvētu opciju, lai mainītu izvadi, darbojas labāk nekā izvadi caur tac. Tātad, ja neliela veiktspējas nobīde nav problēma, cauruļvadu ievadīšana tac, lai atskaņotu izvadi otrādi, ir kārtībā.
Kad nelietot tac
Ir reizes, kad jūs nedrīkstat lietot tac, jo jūs zināt labāk. Šeit ir daži, kas jāatzīmē.
Kad jūs zināt komandu lhs, ir iespēja mainīt izejas līnijas
Kā jau teicu: “Lielākajā daļā komandu ir opcija mainīt izvadi.”Ja jūs zināt, ka konkrētai komandai lhs ir opcija, jūs nedrīkstat izmantot tac. Galu galā -r ir īsāks par - | tac.
Kad veiktspējai ir nozīme
Kā jau es teicu: “Lhs reversās opcijas izmantošana var darboties labāk nekā tac.”Ja jūs vēlaties izspiest dažas sekundes bash skriptā vai nodarbojaties ar lielākiem failiem, kuru lasīšana prasa laiku, jūs nevarat izmantot tac.
Tac palīdzība
Palaižot komandu tac vai man tac, tiek parādīts lietojums kopā ar opcijām, kuras var izmantot. Lūk, ko gaidīt.
Komandas
tac --palīdzībaRezultāts
Tac versija
Kāda es esmu versija?
Jūs esat sava jaunākā versija. Tomēr, ja kāda versija ir jūsu tac, tam ir iespēja.
Komandas
tac - versijaRezultāts
Piezīmes
Ja jūs izmantojat tac FreeBSD vai macOS, garā versijas opcija var nebūt pieejama. Tādā gadījumā mēģiniet -v vai man tac. Ja esat mēģinājis, dariet man zināmu. ES esmu ziņkārīgs. Paldies
Tac iespējas
Bez palīdzības un versijas tac nav daudz iespēju. Par to, kas tam ir, jūs noteikti uzzināsiet, ka tac nav tikai vecs reversais kaķis.
Tac pirms iespējas
Opcija -b ļauj mainīt to, kā atdalītājs tiek pievienots izvadā. Pēc noklusējuma jaunās līnijas atdalītājs tiek pievienots aiz katras līnijas.
Es zinu, ka tas ir mulsinoši. Sadalīsim to pēc piemēra.
Pirmkārt, redzēsim, kā izskatās mūsu produkcija, pirms lietojat tac -b.
Komandas
10. sekRezultāts
Tagad redzēsim, kāda būs mūsu izeja pēc tac izmantošanas bez -b.
Komandas
10. sek tacRezultāts
Tagad redzēsim, kāda izeja pārvēršas par tac -b izmantošanu.
Komandas
10. sek tac -bRezultāts
Tac separatora opcija
Atdalītāja opcija -s 'burtiskā virkne' ļauj norādīt rakstzīmi vai rakstzīmju secību, ko tac izmanto, lai atšķirtu līnijas. Pēc noklusējuma tiek izmantots jaunās līnijas raksturs (“0a” sešstūrī).
Sākotnēji nav skaidrs, kā izmantot tac separatora opciju. Tomēr, tiklīdz jūs zināt, ka tas ir, ir grūti nemēģināt to izmantot.
Apsveriet šo piemēru, kas darbojas ar līnijām, kas attēlotas ar sešstūru.
Komandas
seq 20 | xxd -ps | tac -s '0a' | xxd -ps -rRezultāts
Piezīmes
(1) Tas varētu šķist niecīgi, jo tiek lietots 20 tac komanda, tomēr tādā gadījumā mēs netērējām laiku, strādājot pie izejas straumes sešstūrī. Šī modeļa izmantošana ir noderīga, ja atsevišķais nav kaut kas niecīgs, jo jaunais līnijas raksturs, piemēram, nulles baits.
Tagad mazāk mēģiniet izmantot tac kaut ko nedaudz neapstrādātu un vairāk meta, piemēram, vienkāršu HTML.
Apsveriet šo failu.
Fails
AB
C
Komandas
fails () atbalss-e "AB
C
";
fails | tac -s "
"
Rezultāts
Mums izdevās pārveidot HTML lapu
AB
C
vērā
CB
A
izmantojot tac.
Pieņemsim, ka jums ir jādara kaut kas nedaudz sarežģītāks, piemēram, pret jebkuru tagu jāizturas kā pret atdalītāju. Tādā gadījumā jūs nepazudīsit, izmantojot tikai separatora opciju. Tieši šeit parādās regex opcija. Kopā ar atdalītāja opciju tas ļauj jums izdarīt vairāk ar komandu tac nekā mainīt faila rindu. Lūk, kā.
Tac regex variants
Regex opcija -r -s 'regex' ļauj norādīt, ka atdalītāja virkne jāuzskata par regulāru izteiksmi.
Opcijas tac regex izmantošana ir tikpat vienkārša kā opcijas -r pievienošana pirms vai pēc atdalītāja.
Apsveriet iepriekšējo piemēru, izmantojot opciju regex kopā ar atdalītāja opciju. Pieņemsim, ka tac jebkuru marķēšanas tagu uzskata par atdalītāju.
Fails
vienkāršas funkcijas
Funkcijas ir vienkārši bash. Vismaz šis ir. Tas liek virkni uz ekrāna.
Komandas
vienkārša funkcija
()
atbalss
tik vienkārši, kā tas izpaužas vienkārša funkcija
Avots: https: // tempptemp3.github.io / bash-funkcijas
Komandas
fails ()atbalss '
vienkāršas funkcijas
Funkcijas ir vienkārši bash. Vismaz šis ir. Tas liek
virkne uz ekrāna.
Komandas
vienkārša funkcija
()
atbalss tik vienkārši, kā tas izpaužas
vienkārša funkcija
fails | tac -r -s "] *."
Rezultāts
Mums izdevās konvertēt HTML lapu, reversējot failu, izmantojot HTML tagus. Ja izpētīsit detaļas, pamanīsit, ka tas vēl nav ideāls.
Tac komanda tīrā basā
Šeit ir primitīva tac ieviešanas versija tīrā basā, kas apgriež līnijas, kuras ievada ar lhs komandu. Nākamās versijas tiek atstātas kā vingrinājums.
#!/ bin / bash## tac
## versija 0.0.1 - sākotnējais
#########################################################
tac ()
vietējais -a arr
vietējais -i i
mapfile arr -
i = "$ # arr [@]"
kamēr [$ i -ge 0]
darīt
atbalss $ arr [i]
ļaujiet i- = 1
izdarīts
#########################################################
tac
#########################################################
Avots: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh
Tac komanda, izmantojot citas komandas
Šeit ir dažas primitīvas tac implementācijas versijas, izmantojot citas komandas, kas maina līnijas, kuras ievada komanda lhs. Nākamās versijas tiek atstātas kā vingrinājums.
Pirms mēs sākam, aizveriet acis un padomājiet: “Ko varētu izmantot, lai ieviestu primitīvu tac versiju?”
Prātā nāk daudzas komandas, bet es pievērsīšos tām, kurām mums ir vieta.
gawk
Līdzīgi kā Tac komandā tīrā bash piemērā, lai ieviestu tac, mēs vispirms saglabāsim atkārtotās atskaņotās lasītās rindas apgrieztā secībā pēc visu rindu izlasīšanas. Lūk, kā tas izskatās, izmantojot gawk.
gawk 'line [++ line [0]] = $ (0) END par (i = 0; i
Tagad mēģiniet izmantot komandu lhs 10. sek.
10. sek gawk 'line [++ line [0]] = $ (0) END par (i = 0; i
Kā jūs varētu sagaidīt, produkcija ir
Vingrinājumi
1. Funkcija lhs () sek 10; uzskaita skaitļus no 1 līdz 10. Izrakstiet komandu rhs tā, lai lhs | rhs ir vienāds ar 10864213579, izmantojot tikai tac (padoms: skatiet Tac pirms opcijas piemēra)
2. Apgriezt rhs () izeju atrast -mindepth 1 -maxdepth 1 -print0; , izmantojot tac (padoms: skatiet Tac separatora opcijas piemēru)
3. Pagarināt tac.sh (Tac komandā tīrā basā) izturēties tieši tāpat kā tac. Jums būs jāpievieno opcijas un jāpārbauda viņu uzvedība.
4. Īstenojiet primitīvu tac versiju tīrā basā kā rekursīvu funkciju.
TL; DR
Man atkal patika rakstīt komandu Bash tac. Pēc iepazīšanās es ceru, ka jūs varat piekrist, ka takā ir vairāk nekā jūs domājāt. Pēc tam, kad esat mēģinājis kārtīgi izdarīt lietas apakšā, es ceru, ka jūs zināt, cik noderīga varētu būt tac komanda. Ja kādam izdodas izpildīt kādu no vingrinājumiem vai viņam nepieciešama palīdzība mājasdarbu veikšanā, dariet man zināmu. Paldies,