Linux-kommandon

Bash Tac Command

Bash Tac Command
Tac är en av de kommandon som du inte förstår förrän du redan har gått och gjort det, uppfunnit hjulet på nytt, vilket inte är ovanligt i programmeringen om du bara lär dig repen eller är en professionell med många års erfarenhet att skryta, du är fantastisk. Om dina händer är rena, då bra för dig; Hur som helst, du är ute efter en behandling, jag kommer att ladda ner allt jag vet om tac-kommandot och mer. Läs vidare.

Även känd som omvänd katt, tac ett enkelt kommandoradsverktyg som låter dig omvända linjer i utdata med | inbyggd röroperatör och tac. Det vill säga om du har ett kommando, vänster sida (lhs) och vill vända innehållet i dess utdata, är allt du skulle göra att skriva lhs | tac. Det är allt!

Visserligen finns det mer att tac än vad som syns. Oroa dig inte. Vi täcker allt i god tid.

Råd om tac

Att använda eller inte använda, det är frågan. Du vill inte att du inte vill tac när du inte behöver. Men om du vill sprida tac som ditt bröd- och smörkommando är det upp till dig. Under tiden, här är mitt råd om att ta båda sidor för att förbli lika neutrala.

När ska man använda tac

Det finns tillfällen när du använder tac som hjälper dig att få ut mer på kommandoraden med mindre kod och tid på att undersöka lhs kommandealternativ.

När du inte är säker på alternativen för lhs

Många kommandon som sort kommer med ett alternativ för att vända utdata från ett kommando. Om du inte är säker på om ett kommando på vänster sida har ett -r-alternativ för att omvända utdata, är tac ett säkert sätt att omvända utgångslinjerna.

När prestanda inte spelar någon roll

Även om det är obetydligt, fungerar de flesta kommandon som används tillsammans med ett inbyggt alternativ för att backa utdata bättre än att pipa utgången till tac. Så om en liten prestationsfördröjning inte är ett problem, är det okej att pipa i tac för att spela upp utdata i omvänd ordning.

När man inte ska använda tac

Det finns tillfällen när du kanske inte använder tac eftersom du vet bättre. Här är några att notera.

När du vet har kommandot på lhs möjlighet att vända utgångslinjer

Som jag sa, ”De flesta kommandon har ett alternativ att omvända utdata.”Om du vet att ett specifikt lhs-kommando har ett alternativ kan du inte använda tac. När allt kommer omkring är -r kortare än - | tac.

När prestanda betyder något

Som jag sa, “Att använda alternativet omvänd lhs kan fungera bättre än tac.”Om du vill pressa ut några sekunder i ett bash-skript eller har att göra med större filer som kräver tid att läsa kan du inte använda tac.

Tac hjälp

Att köra hjälpkommandot för tac eller man tac visar användningen tillsammans med alternativ som kan användas. Här är vad du kan förvänta dig.

Kommandon

tac --hjälp

Produktion

Tac-version

Vilken version är jag?
Du är den senaste versionen av dig själv. Men när det gäller vilken version din tac är, finns det ett alternativ för det.

Kommandon

tac --version

Produktion

Anteckningar

Om du använder tac på FreeBSD eller macOS kanske det långa alternativet för version inte är tillgängligt. I så fall försök -v eller man tac. Låt mig veta om du har provat det. Jag är nyfiken. Tack

Tac-alternativ

Förutom hjälp och version har tac inte många alternativ. För vad den har är du säker på att ta reda på att tac inte bara är någon gammal omvänd katt.

Tac före alternativet

Med alternativet -b kan du ändra hur separatorn är ansluten till utdata. Som standard är den nya linjeseparatorn bifogad efter varje rad.

Jag vet att det är förvirrande. Låt oss bryta ner det med exempel.

Låt oss först se hur vår produktion ser ut innan vi använder tac -b.

Kommandon

seq 10

Produktion

Låt oss nu se vad vår produktion blir till efter att ha använt tac utan -b.

Kommandon

seq 10 | tac

Produktion

Låt oss nu se vad utgången blir till med tac -b.

Kommandon

seq 10 | tac -b

Produktion

Tac separator alternativ

Avgränsningsalternativet -s "bokstavlig sträng" låter dig ange tecken eller sekvens av tecken som används av tac för att skilja mellan rader. Som standard används den nya linjetecknet ('0a' i hex).

Hur man använder tac-separatoralternativet är inte självklart först. Men när du väl vet att den är där är det svårt att inte försöka använda den.

Tänk på följande exempel, som fungerar på linjer representerade i hex.

Kommandon

sek 20 | xxd -ps | tac -s '0a' | xxd -ps -r

Produktion

Anteckningar

(1) Det kan verka trivialt som att använda sekvensen 20 | tac-kommandot, men i så fall spenderade vi inte tid på att arbeta med utdataströmmen i hex. Att använda detta mönster är användbart när separata inte är något trivialt som den nya linjetecknet som nollbyte.

Försök nu mindre använda tac på något lite mindre rå och mer meta som enkel HTML.

Tänk på följande fil.

Fil

A
B
C

Kommandon

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

Produktion

Vi lyckades konvertera HTML-sidan

A
B
C

in i

C
B
A

med tac.

Antag att du behöver göra något lite mer komplicerat som att behandla alla taggar som en tac-separator. I så fall kommer du inte att komma undan med att bara använda separatoralternativet ensam. Det är där regex-alternativet kommer in. I kombination med separatoralternativet gör det att du kan göra mer med tac-kommandot än att vända en rad i en fil. Här är hur.

Tac regex-alternativ

Regex-alternativet -r -s 'regex' låter dig ange att separatorsträngen ska behandlas som ett reguljärt uttryck.

Hur man använder tac regex-alternativet är så enkelt som att lägga till -r-alternativet före eller efter separatorn.

Tänk på föregående exempel med hjälp av regex-alternativet i kombination med separatoralternativet. Låt oss tac behandla valfri markeringstagg som en separator.

Fil



enkla funktioner


Funktionerna är enkla i bash. Åtminstone den här är. Det sätter en sträng på skärmen.


Kommandon


enkel funktion
()
eko
så enkelt som det blir enkel funktion

Källa: https: // temptemp3.github.io / bash-funktioner

Kommandon

fil ()

eko '



enkla funktioner

Funktionerna är enkla i bash. Åtminstone den här är. Det sätter en
sträng på skärmen.

Kommandon



enkel funktion

(
)

eko så enkelt som det blir

enkel funktion
''

fil | tac -r -s "] *."

Produktion

Vi lyckades konvertera HTML-sidan och vända filen med HTML-taggar. Om du tittar på detaljerna kommer du att märka att den inte är perfekt än.

Tac-kommando i ren bash

Här är en primitiv version av tac-implement i ren bash som vänder linjerna som rörs in av ett lhs-kommando. Framtida versioner är kvar som en övning.

#!/ bin / bash
## tac
## version 0.0.1 - initial
################################################################
tac ()
lokal-en arr
lokal -i i
kartfil arr -
i = "$ # arr [@]"
medan [$ i -ge 0]
do
eko $ arr [i]
låt i- = 1
Gjort

################################################################
tac
################################################################

Källa: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh

Tac-kommando med andra kommandon

Här är några primitiva versioner av tac-implement med andra kommandon som omvandlar linjerna som rörs in med ett lhs-kommando. Framtida versioner är kvar som en övning.

Innan vi börjar, stäng ögonen och tänk, ”Vad kan användas för att implementera en primitiv version av tac?”
Många kommandon kommer att tänka på men jag kommer att fokusera på de som vi har utrymme för.

gawk

Liknar Tac-kommandot i rent bash-exempel, för att implementera tac skulle vi först lagra de läsrader som ska spelas om i omvänd ordning efter att alla rader har lästs. Så här ser det ut med gawk.

 gawk 'line [++ line [0]] = $ (0) END för (i = 0; i

Försök nu använda kommandot lhs seq 10.

 seq 10 | gawk 'line [++ line [0]] = $ (0) END för (i = 0; i

Som du förväntar dig är produktionen

Övningar

1. Funktionen lhs () seq 10; listar heltal 1 till 10. Skriv ut ett rhs-kommando så att lhs | rhs är lika med 10864213579 endast med tac (Tips: se Tac före alternativsexempel)
2. Omvänd utdata från rhs () hitta -mindepth 1 -maxdepth 1 -print0; med tac (Tips: se exempel på Tac-separatoralternativ)
3. Förläng tac.sh (i Tac-kommandot i ren bash) för att bete sig precis som tac. Du måste lägga till alternativ och se till att testa deras beteende.
4. Implementera en primitiv version av tac i ren bash som en rekursiv funktion.

TL; DR

Återigen tyckte jag om att skriva Bash tac-kommandot. Efter att ha läst hoppas jag att du kan komma överens om att det finns mer att tac än du trodde. Efter att ha försökt göra saker på det hårda sättet nära botten hoppas jag också att du vet hur användbart tac-kommandot kan vara. Om någon lyckas slutföra någon av övningarna eller behöver hjälp med sina läxor, låt mig veta. Tack,

Mus Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Markören hoppar eller rör sig slumpmässigt när du skriver in Windows 10
Om du upptäcker att muspekaren hoppar eller rör sig på egen hand, automatiskt, slumpmässigt när du skriver in Windows-bärbar dator eller dator, kan nå...
Mus Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Så här vänder du mus- och styrplattans rullningsriktning i Windows 10
Mus och Pekplattas gör inte bara datoranvändning lättare men effektivare och mindre tidskrävande. Vi kan inte föreställa oss ett liv utan dessa enhete...
Mus Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Så här ändrar du muspekare och markörstorlek, färg och schema på Windows 10
Muspekaren och markören i Windows 10 är mycket viktiga aspekter av operativsystemet. Detta kan också sägas för andra operativsystem, så i sanning är d...