Også kendt som reverse cat, tac et simpelt kommandolinjeprogram, der giver dig mulighed for at reversere linjer i output ved hjælp af | indbygget røroperatør og tac. Det vil sige, hvis du har en kommando, venstre side (lhs) og vil vende indholdet af output, alt hvad du ville gøre er at skrive lhs | tac. Det er det!
Ganske vist er der mere at tac, end det ser ud. Bare rolig. Vi dækker det hele i god tid.
Råd om tac
At bruge eller ikke bruge, det er spørgsmålet. Du vil ikke, at du ikke vil tacere, når du ikke behøver. Men hvis du vil sprede tac som din brød- og smørkommando, er det op til dig. I mellemtiden er her mit råd om at tage begge sider for at forblive så neutrale.
Hvornår skal man bruge tac
Der er tidspunkter, hvor du skal bruge tac, der hjælper dig med at få mere ud af kommandolinjen med mindre kode og brugt tid på at undersøge lhs kommandomuligheder.
Når du ikke er sikker på mulighederne for lhs
Mange kommandoer som sort kommer med en mulighed for at vende output fra en kommando. Men hvis du ikke er sikker på, om en kommando på venstre side har en -r mulighed for at vende output, er brug af tac en sikker måde at vende output linjerne på.
Når ydeevne ikke betyder noget
Selvom det er ubetydeligt, fungerer de fleste kommandoer, der bruges i forbindelse med en indbygget mulighed for at reversere output, bedre end at rør output til tac. Så hvis lidt præstationsforsinkelse ikke er et problem, er det okay at røre til tac for at afspille output i omvendt rækkefølge.
Hvornår skal man ikke bruge tac
Der er tidspunkter, hvor du måske ikke bruger tac, fordi du ved bedre. Her er et par at bemærke.
Når du kender kommandoen på lhs, har den mulighed for at vende outputlinjer
Som jeg sagde, “De fleste kommandoer har en mulighed for at reversere output.”Hvis du ved, at en bestemt lhs-kommando har en mulighed, kan du ikke bruge tac. Når alt kommer til alt er -r kortere end - | tac.
Når ydeevne betyder noget
Som jeg sagde, “Brug af alternativet LSS-omvendt fungerer muligvis bedre end tac.”Hvis du ønsker at presse et par sekunder ud i et bash-script eller har at gøre med større filer, der kræver tid til at læse, kan du ikke bruge tac.
Tac hjælp
Kørsel af hjælpekommandoen til tac eller man tac viser brugen sammen med de muligheder, der kan bruges. Her er hvad man kan forvente.
Kommandoer
tac - hjælpProduktion
Tac-version
Hvilken version er jeg?
Du er den nyeste version af dig selv. I tilfælde af hvilken version din tac er, er der dog en mulighed for det.
Kommandoer
tac --versionProduktion
Bemærkninger
Hvis du bruger tac på FreeBSD eller macOS, er den lange mulighed for version muligvis ikke tilgængelig. I så fald skal du prøve -v eller man tac. Hvis du har prøvet det, så lad mig det vide. jeg er nysgerrig. Tak
Tac-muligheder
Udover hjælp og version har tac ikke mange muligheder. For hvad det har, er du sikker på at finde ud af, at tac ikke bare er en gammel omvendt kat.
Tac før mulighed
Indstillingen -b giver dig mulighed for at ændre, hvordan separatoren er knyttet til output. Som standard er den nye linieseparator vedhæftet efter hver linje.
Jeg ved, det er forvirrende. Lad os nedbryde det med et eksempel.
Lad os først se, hvad vores output ser ud, før vi bruger tac -b.
Kommandoer
seq 10Produktion
Lad os nu se, hvad vores output bliver til efter brug af tac uden -b.
Kommandoer
seq 10 | tacProduktion
Lad os nu se, hvad output bliver til ved hjælp af tac -b.
Kommandoer
seq 10 | tac -bProduktion
Tac separator mulighed
Separatorindstillingen -s 'bogstavelig streng' giver dig mulighed for at specificere karakteren eller rækkefølgen af tegn, der bruges af tac til at skelne linjer fra hinanden. Som standard bruges den nye linjetegn ('0a' i hex).
Sådan bruges tac-separatorindstillingen er ikke indlysende i starten. Men når du først ved, at det er der, er det svært ikke at prøve at bruge det.
Overvej følgende eksempel, der fungerer på linjer repræsenteret i hex.
Kommandoer
seq 20 | xxd -ps | tac -s '0a' | xxd -ps -rProduktion
Bemærkninger
(1) Det kan virke trivielt som at bruge sekvens 20 | tac-kommando, men i så fald brugte vi ikke tid på at arbejde på outputstrømmen i hex. Brug af dette mønster er nyttigt, når separat ikke er noget trivielt som den nye linjekarakter som nulbyte.
Prøv nu mindre at bruge tac på noget lidt mindre rå og mere meta som simpel HTML.
Overvej følgende fil.
Fil
ENB
C
Kommandoer
fil () echo -e "AB
C
";
fil | tac -s "
"
Produktion
Det lykkedes os at konvertere HTML-siden
ENB
C
ind i
CB
EN
ved hjælp af tac.
Antag, at du har brug for at gøre noget lidt mere kompliceret som at behandle ethvert tag som en tac-separator. I så fald kommer du ikke væk med bare at bruge separatorindstillingen alene. Det er her, regex-indstillingen kommer ind. Kombineret med separatorindstillingen giver det dig mulighed for at gøre mere med tac-kommandoen end at vende en linje i en fil. Sådan gør du.
Tac regex-mulighed
Regex-indstillingen -r -s 'regex' giver dig mulighed for at specificere, at separatorstrengen skal behandles som et regulært udtryk.
Sådan bruges indstillingen tac regex er så simpelt som at tilføje indstillingen -r før eller efter separatoren.
Overvej det forrige eksempel ved hjælp af regex-indstillingen sammen med separator-indstillingen. Lad os tac behandle ethvert markeringstag som en separator.
Fil
enkle funktioner
Funktioner er enkle i bash. I det mindste er det sådan. Det sætter en streng på skærmen.
Kommandoer
enkel funktion
()
ekko
så simpelt som det bliver enkel funktion
Kilde: https: // temptemp3.github.io / bash-funktioner
Kommandoer
fil ()ekko '
enkle funktioner
Funktioner er enkle i bash. I det mindste er det sådan. Det sætter en
streng på skærmen.
Kommandoer
enkel funktion
()
ekko så simpelt som det bliver
enkel funktion
fil | tac -r -s "] *."
Produktion
Det lykkedes os at konvertere HTML-siden, der vender filen ved hjælp af HTML-tags. Hvis du ser nærmere på detaljerne, vil du bemærke, at de endnu ikke er perfekte.
Tac-kommando i ren bash
Her er en primitiv version af tac-implement i ren bash, der vender de linjer, der ledes ind af en lhs-kommando. Fremtidige versioner er tilbage som en øvelse.
#!/ bin / bash## tac
## version 0.0.1 - indledende
##################################################################
tac ()
lokal -a arr
lokal -i i
kortfil arr -
i = "$ # arr [@]"
mens [$ i -ge 0]
gør
ekko $ arr [i]
lad i- = 1
Færdig
##################################################################
tac
##################################### ############################
Kilde: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh
Tac-kommando ved hjælp af andre kommandoer
Her er nogle primitive versioner af tac-implementering ved hjælp af andre kommandoer, der vender linjerne, der ledes ind af en lhs-kommando. Fremtidige versioner er tilbage som en øvelse.
Inden vi kommer i gang, skal du lukke øjnene og tænke, ”Hvad kunne bruges til at implementere en primitiv version af tac?”
Mange kommandoer kommer til at tænke på, men jeg vil fokusere på dem, vi har plads til.
kæbe
Svarende til Tac-kommandoen i et rent bash-eksempel, for at implementere tac, lagrer vi først de læste linjer, der skal afspilles i omvendt rækkefølge, efter at alle linjerne er læst. Sådan ser det ud ved hjælp af gawk.
gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Prøv nu at bruge på lhs-kommandoen seq 10.
seq 10 | gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Som du ville forvente, er output
Øvelser
1. Funktionen lhs () seq 10; viser heltalene 1 til 10. Skriv en rhs-kommando sådan, at lhs | rhs er lig med 10864213579, der kun bruger tac (tip: se Tac før eksempeleksempel)
2. Vend output fra rhs () find -mindepth 1 -maxdepth 1 -print0; ved hjælp af tac (Tip: se eksempel på Tac-separatorindstilling)
3. Forlæng tac.sh (i Tac-kommando i ren bash) for at opføre sig nøjagtigt som tac. Du bliver nødt til at tilføje muligheder og sørge for at teste deres adfærd.
4. Implementere en primitiv version af tac i ren bash som en rekursiv funktion.
TL; DR
Igen nød jeg at skrive Bash tac-kommandoen. Efter at have læst håber jeg, at du kan være enig i, at der er mere at tac, end du troede. Efter at have forsøgt at gøre tingene på den hårde vej nær bunden, håber jeg, at du ved, hvor nyttig tac-kommandoen kan være. Hvis nogen formår at gennemføre en af øvelserne eller har brug for hjælp til deres lektier, så lad mig det vide. Tak,