Taip pat žinomas kaip atvirkštinis katinas, pažymėkite paprastą komandinės eilutės įrankį, kuris leidžia pakeisti išvesties eilutes naudojant | įmontuotas vamzdžių operatorius ir tac. Tai yra, jei turite komandą, kairę pusę (lhs) ir norite pakeisti jos išvesties turinį, viskas, ką padarytumėte, tai įveskite lhs | tac. Viskas!
Reikia pripažinti, kad tac yra daugiau nei atrodo. Nesijaudink. Viską apimsime laiku.
Patarimai dėl tac
Naudoti ar nenaudoti, tai yra klausimas. Nenorite, kad nenorėtumėte tacėti, kai to nereikia. Tačiau jei norite paskleisti „tac“ kaip duonos ir sviesto komandą, tai priklauso nuo jūsų. Tuo tarpu čia yra mano patarimas, kaip laikytis abiejų pusių taksi, kad išliktų neutralios.
Kada vartoti tac
Yra atvejų, kai reikia naudoti „tac“, kuris padeda jums gauti daugiau naudos iš komandinės eilutės su mažesniu kodu ir sugaištamu laiku tiriant „lhs“ komandų parinktis.
Kai nesate tikri dėl lhs variantų
Daugelyje tokių komandų, kaip rūšiavimas, yra galimybė pakeisti komandos išvestį. Tačiau jei nesate tikri, ar kairėje pusėje esančioje komandoje yra -r galimybė pakeisti išvestį, naudojant tac yra tikras būdas pakeisti išvesties linijas.
Kai pasirodymas nesvarbu
Nors ir nereikšmingos, dauguma komandų, naudojamų kartu su įmontuota galimybe pakeisti išvestį, veikia geriau nei išvesties išvedimas į tac. Taigi, jei nedidelis našumas neveikia, tinkama naudoti „tac“, kad būtų galima atkurti išvestį atvirkščiai.
Kada nenaudoti tac
Yra atvejų, kai galite nenaudoti „tac“, nes žinote geriau. Štai keli pastebimi dalykai.
Kai žinote komandą lhs, galite pakeisti išvesties eilutes
Kaip sakiau: „Daugumoje komandų yra galimybė pakeisti išvestį.„Jei žinote, kad tam tikra komanda„ lhs “gali pasirinkti, negalima naudoti„ tac “. Juk -r yra trumpesnis nei - | tac.
Kai svarbu spektaklis
Kaip sakiau: „Naudojant atvirkštinį„ lhs “variantą gali būti geriau nei„ tac “.„Jei norite išspausti kelias sekundes„ bash “scenarijuje arba susiduriate su didesniais failais, kuriems skaityti reikia laiko, galite nenaudoti„ tac “.
Tac pagalba
Paleidus pagalbos komandą „tac“ arba „man tac“, parodomas naudojimas kartu su galimomis parinktimis. Štai ko tikėtis.
Komandos
tac - pagalbaRezultatas
„Tac“ versija
Kokia aš esu versija?
Jūs esate naujausia savo versija. Tačiau, kokia versija yra jūsų „tac“, tam yra galimybė.
Komandos
tac - versijaRezultatas
Pastabos
Jei „tac“ naudojate „FreeBSD“ ar „MacOS“, ilgos versijos parinkties gali nebūti. Tokiu atveju pabandykite -v arba man tac. Jei pabandėte, praneškite man. Man smalsu. Dėkoju
„Tac“ parinktys
Be pagalbos ir versijos, „tac“ neturi daug galimybių. Dėl to, ką jis turi, jūs tikrai sužinosite, kad „tac“ nėra bet kokia sena atvirkštinė katė.
Tac prieš pasirinkimą
Parinktis -b leidžia pakeisti, kaip separatorius pritvirtintas išvestyje. Pagal numatytuosius nustatymus naujos eilutės skyriklis pridedamas po kiekvienos eilutės.
Žinau, kad tai painu. Išskaidykime tai pavyzdžiu.
Pirmiausia pažiūrėkime, kaip atrodo mūsų išvestis, prieš naudodami tac -b.
Komandos
10 sekRezultatas
Dabar pažiūrėkime, kuo virsta mūsų išvestis naudojant tac be -b.
Komandos
10 sek tacRezultatas
Dabar pažiūrėkime, ką išvestis paverčia tac -b naudojimu.
Komandos
10 sek tac -bRezultatas
„Tac separator“ parinktis
Skyriklio parinktis -s „pažodinė eilutė“ leidžia nurodyti simbolį ar simbolių seką, kurią „tac“ naudoja linijoms atskirti. Pagal numatytuosius nustatymus naudojamas naujos eilutės simbolis („0a“ šešiakampiu).
Iš pradžių nėra akivaizdu, kaip naudoti „Tac separator“ parinktį. Tačiau, kai žinai, kad jis yra, sunku nebandyti juo naudotis.
Apsvarstykite šį pavyzdį, veikiantį linijomis, pavaizduotomis šešiakampėmis.
Komandos
20 sek xxd -ps | tac -s '0a' | xxd -ps -rRezultatas
Pastabos
(1) Gali atrodyti nereikšminga, nes naudojamas 20 sek „tac“ komanda, tačiau tokiu atveju mes nepraleidome laiko dirbdami su išvesties srautu „hex“. Naudoti šį modelį yra naudinga, kai atskirasis nėra niekinis dalykas, nes naujasis eilutės simbolis, pavyzdžiui, nulis baitas.
Dabar mažiau bandykite naudoti „tac“ šiek tiek mažiau neapdorotam ir daugiau meta, pavyzdžiui, paprastam HTML.
Apsvarstykite šį failą.
Failas
AB
C
Komandos
byla () echo -e "AB
C
";
byla | tac -s "
"
Rezultatas
Mums pavyko konvertuoti HTML puslapį
AB
C
į
CB
A
naudojant tac.
Tarkime, kad jums reikia padaryti šiek tiek sudėtingesnį dalyką, pvz., Traktuoti bet kokią žymą kaip „tac“ skyriklį. Tokiu atveju jūs neketinate išsisukti naudodami tik separatoriaus parinktį. Štai kur atsiranda „regex“ parinktis. Kartu su skyriklio parinktimi galite padaryti daugiau naudodami komandą tac, nei pakeisti failo eilutę. Štai kaip.
„Tac regex“ parinktis
Regex parinktis -r -s 'regex' leidžia nurodyti, kad skiriamoji eilutė turi būti traktuojama kaip įprasta išraiška.
Kaip naudoti parinktį „tac regex“ yra taip pat paprasta, kaip pridėti -r prieš arba po separatoriaus.
Apsvarstykite ankstesnį pavyzdį, naudodami parinktį regex kartu su parinktimi separatorius. Tac traktuokime bet kokią žymėjimo žymą kaip atskyriklį.
Failas
paprastos funkcijos
Bash funkcijos yra paprastos. Bent jau šis yra. Tai uždeda eilutę ekrane.
Komandos
paprasta funkcija
()
aidas
kuo paprasčiau paprasta funkcija
Šaltinis: https: // tempptemp3.github.io / bash-funkcijos
Komandos
failas ()aidas '
paprastos funkcijos
Bash funkcijos yra paprastos. Bent jau šis yra. Tai kelia a
eilutė ekrane.
Komandos
paprasta funkcija
()
aidas kuo paprasčiau
paprasta funkcija
byla | tac -r -s "] *."
Rezultatas
Mums pavyko konvertuoti HTML puslapį, pakeičiant failą naudojant HTML žymas. Jei pažvelgsite į detales, pastebėsite, kad ji dar nėra tobula.
Tac komanda gryna bash
Čia yra primityvus „tac“ įrankio gryna versija, pakeičiantis linijas, įvestas komanda „lhs“. Ateities versijos paliekamos kaip pratimas.
#!/ bin / bash## tac
## versija 0.0.1 - pradinis
########################################################
tac ()
vietinis -a arr
vietinis -i i
mapfile arr -
i = "$ # arr [@]"
o [$ i -ge 0]
padaryti
aidas $ arr [i]
tegul i- = 1
padaryta
########################################################
tac
########################################################
Šaltinis: https: // github.com / temptemp3 / ba.sh / blob / master / tac.sh
„Tac“ komanda naudojant kitas komandas
Čia pateikiamos kelios primityvios „tac“ versijos versijos, naudojančios kitas komandas, kurios pakeičia linijas, įvestas komanda „lhs“. Ateities versijos paliekamos kaip pratimas.
Prieš mums pradedant, užmerkite akis ir pagalvokite: „Ką būtų galima panaudoti įgyvendinant primityvią„ tac “versiją?“
Į galvą ateina daugybė komandų, bet aš sutelksiu dėmesį į tuos, kuriems turime vietos.
gawk
Panašiai kaip „Tac“ komandoje gryname „bash“ pavyzdyje, kad įgyvendintume „tac“, pirmiausia perskaitysime visas perskaitytas eilutes perskaičiuotomis perskaitytomis eilutėmis. Štai kaip tai atrodytų naudojant gawk.
gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Dabar pabandykite naudoti komandą lhs 10 seką.
10 sek gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Kaip galima tikėtis, produkcija yra
Pratimai
1. Funkcija lhs () sek 10; išvardijami skaičiai nuo 1 iki 10. Parašykite rhs komandą taip, kad lhs | rhs yra lygus 10864213579 tik naudojant tac (Patarimas: žr. Tac prieš pasirinkimo pavyzdį)
2. Atvirkštinis rhs () išėjimas rasti -mindepth 1 -maxdepth 1 -print0; naudojant „tac“ (patarimas: žr. „Tac separator“ parinkties pavyzdį)
3. Išplėskite tac.sh (Tac komandoje gryna bash) elgtis tiksliai taip, kaip tac. Turėsite pridėti parinkčių ir būtinai išbandyti jų elgesį.
4. Įgyvendinkite primityvią „tac“ versiją gryname bash'e kaip rekursinę funkciją.
TL; DR
Man vėl patiko rašyti komandą „Bash tac“. Perskaitęs tikiuosi, kad sutiksite, jog „tac“ yra daugiau, nei manėte. Be to, pabandęs atlikti sunkius veiksmus netoli dugno, tikiuosi, kad žinote, kokia naudinga gali būti „tac“ komanda. Jei kas nors sugeba atlikti bet kurį iš pratimų arba jam reikia pagalbos atliekant namų darbus, praneškite man. Dėkoju,