Linux-kommandoer

Bash Tac-kommando

Bash Tac-kommando
Tac er en af ​​de kommandoer, som du ikke er klar over, før du allerede er gået og gjort det, genopfundet hjulet, hvilket ikke er ualmindeligt i programmeringen, uanset om du bare lærer rebene eller er en professionel med mange års erfaring at prale, du er fantastisk. Hvis dine hænder er rene, så er det godt for dig; Uanset hvad er du i godbid, jeg vil aflæsse alt, hvad jeg ved om tac-kommandoen og mere. Læs videre.

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ælp

Produktion

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 --version

Produktion

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 10

Produktion

Lad os nu se, hvad vores output bliver til efter brug af tac uden -b.

Kommandoer

seq 10 | tac

Produktion

Lad os nu se, hvad output bliver til ved hjælp af tac -b.

Kommandoer

seq 10 | tac -b

Produktion

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 -r

Produktion

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

EN
B
C

Kommandoer

fil () echo -e "A
B
C
";
fil | tac -s "
"

Produktion

Det lykkedes os at konvertere HTML-siden

EN
B
C

ind i

C
B
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,

Sådan vises OSD-overlay i fuldskærms Linux-apps og -spil
Afspilning af fuldskærmsspil eller brug af apps i distraktionsfri fuldskærmstilstand kan afskære dig fra relevante systemoplysninger, der er synlige i...
Top 5 spiloptagelseskort
Vi har alle set og elsket streaming af gameplay på YouTube. PewDiePie, Jakesepticye og Markiplier er kun nogle af de bedste spillere, der har tjent mi...
Sådan udvikler du et spil på Linux
For et årti siden ville ikke mange Linux-brugere forudsige, at deres foretrukne operativsystem en dag ville være en populær spilplatform til kommercie...