Comenzi Linux

Comanda Bash Tac

Comanda Bash Tac
Tac este una dintre acele comenzi pe care nu le realizezi până când nu te-ai dus deja și ai făcut-o, a reinventat roata, ceea ce nu este neobișnuit în practica programării indiferent dacă înveți doar corzile sau ești un profesionist cu ani de experiență laudă, ești minunat. Dacă mâinile tale sunt curate, atunci bine pentru tine; Oricum ar fi, sunteți în căutarea unui tratament, voi descărca tot ce știu despre comanda tac și multe altele. Citiți mai departe.

Cunoscut și sub numele de reverse cat, tac, un simplu utilitar de linie de comandă care vă permite să inversați liniile în ieșire folosind | operator de conducte încorporat și tac. Adică, dacă aveți o comandă, partea stângă (lhs) și doriți să inversați conținutul ieșirii sale, tot ce ați face este să tastați lhs | tac. Asta este!

Ce-i drept, există mai multe lucruri decât tac. Nu-ți face griji. Vom acoperi totul, la timp.

Sfaturi cu privire la tac

A folosi sau a nu folosi, aceasta este întrebarea. Nu vrei să nu vrei să tac când nu trebuie. Cu toate acestea, dacă doriți să răspândiți tac ca comandă pentru pâine și unt, depinde de dvs. Între timp, iată sfatul meu cu privire la acceptarea de către ambele părți a rămâne la fel de neutre.

Când se folosește tac

Există momente când utilizați tac care vă ajută să obțineți mai mult din linia de comandă cu mai puțin cod și timp petrecut cercetând opțiunile de comandă lhs.

Când nu sunteți sigur de opțiunile lhs

Multe comenzi precum sortare vin cu o opțiune pentru a inversa ieșirea unei comenzi. Cu toate acestea, dacă nu sunteți sigur dacă o comandă din partea stângă are sau nu o opțiune -r pentru a inversa ieșirea, utilizarea tac este o modalitate sigură de a inversa liniile de ieșire.

Când performanța nu contează

Deși nesemnificative, majoritatea comenzilor utilizate împreună cu o opțiune încorporată pentru a inversa ieșirea au performanțe mai bune decât canalizarea ieșirii în tac. Deci, dacă un pic de întârziere de performanță nu este o problemă, canalizarea în tac pentru a reda ieșirea inversă este în regulă.

Când nu folosiți tac

Există momente în care este posibil să nu utilizați tac pentru că știți mai bine. Iată câteva de remarcat.

Când știți că comanda de pe lhs are o opțiune de inversare a liniilor de ieșire

Așa cum am spus, „Majoritatea comenzilor vin cu o opțiune de inversare a ieșirii.”Dacă știți că o anumită comandă lhs are o opțiune, nu puteți utiliza tac. La urma urmei, -r este mai scurt decât - | tac.

Când performanța contează

Așa cum am spus, „Utilizarea opțiunii de inversare lhs poate avea rezultate mai bune decât tac.”Dacă doriți să strângeți câteva secunde într-un script bash sau aveți de-a face cu fișiere mai mari care necesită timp pentru citire, nu puteți utiliza tac.

Tac ajutor

Rularea comenzii de ajutor pentru tac sau man tac arată utilizarea împreună cu opțiunile care pot fi utilizate. Iată la ce să ne așteptăm.

Comenzi

tac --help

Ieșire

Versiunea tac

Ce versiune sunt?
Ești cea mai recentă versiune a ta. Cu toate acestea, în cazul în care versiune este tac-ul tău, există o opțiune pentru asta.

Comenzi

tac --versiune

Ieșire

Note

Dacă utilizați tac pe FreeBSD sau macOS, este posibil ca opțiunea lungă pentru versiune să nu fie disponibilă. În acest caz, încercați -v sau man tac. Dacă ai încercat, anunță-mă. Sunt curios. Mulțumiri

Opțiuni tac

În afară de ajutor și versiune, tac nu are multe opțiuni. Pentru ceea ce are, sunteți sigur că veți afla că tac nu este o pisică inversă veche.

Opțiunea Tac înainte

Opțiunea -b vă permite să modificați modul în care separatorul este atașat la ieșire. În mod implicit, separatorul de linie nouă este atașat după fiecare linie.

Știu că este confuz. Să o descompunem prin exemplu.

În primul rând, să vedem cum arată rezultatul nostru înainte de a utiliza tac -b.

Comenzi

sec. 10

Ieșire

Acum să vedem în ce se transformă ieșirea noastră după utilizarea tac fără -b.

Comenzi

sec. 10 | tac

Ieșire

Acum să vedem în ce se transformă ieșirea folosind tac -b.

Comenzi

sec. 10 | tac -b

Ieșire

Opțiunea separator tac

Opțiunea separator - „șir literal” vă permite să specificați caracterul sau secvența de caractere folosită de tac pentru a distinge liniile. În mod implicit, se folosește caracterul newline („0a” în hex.).

Cum se folosește opțiunea separator tac nu este evident la început. Cu toate acestea, odată ce știți că este acolo, este greu să nu încercați să-l utilizați.

Luați în considerare următorul exemplu, care operează pe linii reprezentate în hex.

Comenzi

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

Ieșire

Note

(1) S-ar putea părea banal ca folosind sec 20 | comanda tac, cu toate acestea, în acest caz, nu am petrecut timp lucrând la fluxul de ieșire în hex. Folosirea acestui model este utilă atunci când separarea nu este ceva banal ca noul caracter de linie, cum ar fi octetul zero.

Acum, mai puțin încercați să utilizați tac pe ceva puțin mai puțin brut și mai meta, cum ar fi HTML simplu.

Luați în considerare următorul fișier.

Fişier

A
B
C

Comenzi

file () echo -e "A
B
C
";
fișier | tac -s "
"

Ieșire

Am reușit să convertim pagina HTML

A
B
C

în

C
B
A

folosind tac.

Să presupunem că trebuie să faceți ceva puțin mai complicat, cum ar fi tratarea oricărei etichete ca un separator tac. În acest caz, nu veți scăpa doar folosind opțiunea separator singură. Aici intervine opțiunea regex. Combinată cu opțiunea separator vă permite să faceți mai mult cu comanda tac decât să inversați o linie într-un fișier. Iată cum.

Opțiunea Tac regex

Opțiunea regex -r -s 'regex' vă permite să specificați că șirul separator trebuie tratat ca o expresie regulată.

Modul de utilizare a opțiunii tac regex este la fel de simplu ca adăugarea opțiunii -r înainte sau după separator.

Luați în considerare exemplul anterior folosind opțiunea regex împreună cu opțiunea separator. Să tratăm tac orice etichetă de marcare ca pe un separator.

Fişier



funcții simple


Funcțiile sunt simple în bash. Cel puțin acesta este. Pune un șir pe ecran.


Comenzi


funcție simplă
()
ecou
pe cât de simplu devine funcție simplă

Sursa: https: // temptemp3.github.io / bash-functions

Comenzi

file ()

ecou '



funcții simple

Funcțiile sunt simple în bash. Cel puțin acesta este. Se pune o
șir pe ecran.

Comenzi



funcție simplă

(
)

ecou pe cât de simplu devine

funcție simplă
'

fișier | tac -r -s "] *."

Ieșire

Am reușit să convertim pagina HTML inversând fișierul folosind etichete HTML. Dacă vă uitați la detalii, veți observa că nu este încă perfect.

Comanda tac în bash pur

Iată o versiune primitivă a instrumentului tac în bash pur care inversează liniile introduse de o comandă lhs. Versiunile viitoare sunt lăsate ca exercițiu.

#!/ bin / bash
## tac
## versiunea 0.0.1 - inițială
######################################################
tac ()
local -a arr
local -i i
mapfile arr -
i = "$ # arr [@]"
în timp ce [$ i -ge 0]
do
ecou $ arr [i]
să i- = 1
Terminat

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

Sursa: https: // github.com / temptemp3 / ba.sh / blob / master / tac.SH

Comanda Tac folosind alte comenzi

Iată câteva versiuni primitive ale implementării tac folosind alte comenzi care inversează liniile introduse de o comandă lhs. Versiunile viitoare sunt lăsate ca exercițiu.

Înainte de a începe, închide ochii și gândește-te: „Ce ar putea fi folosit pentru a implementa o versiune primitivă a tac?”
Îmi vin în minte multe comenzi, dar mă voi concentra asupra celor pentru care avem loc.

bălălău

Similar cu comanda Tac în exemplul bash pur, pentru a implementa tac, am stoca mai întâi liniile de citit pentru a fi redate în sens invers după ce toate liniile sunt citite. Iată cum ar arăta folosind gawk.

 gawk 'line [++ line [0]] = $ (0) END for (i = 0; i

Acum încercați să utilizați comanda lhs seq 10.

 sec. 10 | gawk 'line [++ line [0]] = $ (0) END for (i = 0; i

Așa cum v-ați aștepta, rezultatul este

Exerciții

1. Funcția lhs () seq 10; listează numerele întregi de la 1 la 10. Scrieți o comandă rhs astfel încât lhs | rhs este egal cu 10864213579 folosind doar tac (Sugestie: vezi Tac înainte de exemplu opțiune)
2. Inversați ieșirea lui rhs () find -mindepth 1 -maxdepth 1 -print0; folosind tac (Sugestie: vezi exemplu opțiunea separator Tac)
3. Extinde tac.sh (în comanda Tac în bash pur) să se comporte exact ca tac. Va trebui să adăugați opțiuni și să vă asigurați că le testați comportamentul.
4. Implementați o versiune primitivă a tac în bash pur ca o funcție recursivă.

TL; DR

Din nou, mi-a plăcut să scriu comanda Bash tac. După ce am citit, sper că sunteți de acord că există mai multe de tac decât credeați. De asemenea, după ce am încercat să fac lucrurile într-un mod greu, aproape de jos, sper că știi cât de utilă ar putea fi comanda tac. Dacă cineva reușește să finalizeze oricare dintre exerciții sau are nevoie de ajutor la teme, anunță-mă. Mulțumiri,

Microsoft Sculpt Touch Wireless Mouse Review
I recently read about the Microsoft Sculpt Touch wireless mouse and decided to buy it. After using it for a while, I decided to share my experience wi...
AppyMouse On-screen Trackpad and Mouse Pointer for Windows Tablets
Tablet users often miss the mouse pointer, especially when they are habitual to using the laptops. The touchscreen Smartphones and tablets come with m...
Middle mouse button not working in Windows 10
The middle mouse button helps you scroll through long webpages and screens with a lot of data. If that stops, well you will end up using the keyboard ...