Tunnetaan myös nimellä käänteinen kissa, tac yksinkertainen komentorivi-apuohjelma, jonka avulla voit kääntää tulosteet rivillä | sisäänrakennettu putkioperaattori ja tac. Eli jos sinulla on komento, vasen puoli (lhs) ja haluat kääntää lähdön sisällön, tekisit vain kirjoittamalla lhs | tac. Se siitä!
Tosiaankin, tac on enemmän kuin mitä silmä näkee. Älä huoli. Käsittelemme kaiken hyvissä ajoin.
Neuvoja tacista
Jos haluat käyttää tai olla käyttämättä, se on kysymys. Et halua peukaloida, kun sinun ei tarvitse. Kuitenkin, jos haluat levittää tac leivän ja voin komennoksi, se on sinun tehtäväsi. Sillä välin tässä on neuvoni tac: n ottamisesta molempien osapuolten pysymiseksi neutraaleina.
Milloin käyttää tac
Toisinaan tac: n avulla saat enemmän irti komentorivistä, vähemmän koodia ja aikaa, joka kuluu lhs-komentovaihtoehtojen tutkimiseen.
Kun et ole varma lhs: n vaihtoehdoista
Monissa komennoissa, kuten lajittelussa, on mahdollisuus kääntää komennon tulos. Jos et kuitenkaan ole varma, onko vasemmanpuoleisella komennolla -r-vaihtoehto kääntää ulostulo, tac on varma tapa kääntää lähtölinjat.
Kun suorituskyvyllä ei ole merkitystä
Vaikka merkityksetöntä, useimmat komennot, joita käytetään yhdessä sisäänrakennetun vaihtoehdon kanssa tuotoksen kääntämiseksi, toimivat paremmin kuin johtamalla lähtö tac: iin. Joten jos pieni suorituskyvyn viive ei ole ongelma, putkistaminen taciin toistamaan lähtö käänteisesti on kunnossa.
Milloin ei pidä käyttää tac
On aikoja, jolloin et voi käyttää tacia, koska tiedät paremmin. Tässä on muutamia huomioitavia.
Kun tiedät, että lhs-komennolla on mahdollisuus kääntää lähtörivit
Kuten sanoin: "Useimmissa komennoissa on mahdollisuus kääntää lähtö.”Jos tiedät, että tietyllä lhs-komennolla on vaihtoehto, et voi käyttää tac-näppäintä. Loppujen lopuksi -r on lyhyempi kuin - | tac.
Kun suorituskyvyllä on merkitystä
Kuten sanoin, "lhs-käänteisen vaihtoehdon käyttö voi toimia paremmin kuin tac."Jos haluat purkaa muutaman sekunnin bash-komentosarjassa tai käsittelet suurempia tiedostoja, joiden lukeminen vie aikaa, et voi käyttää tac.
Tac-apu
Tac- tai man tac -ohjekomennon suorittaminen näyttää käytön ja mahdollisesti käytettävät vaihtoehdot. Tässä on mitä odottaa.
Komennot
tac --apuaTuotos
Tac-versio
Mikä versio olen?
Olet viimeisin versio itsestäsi. Kuitenkin siinä versiossa, missä tac on, on siihen vaihtoehto.
Komennot
tac - versioTuotos
Huomautuksia
Jos käytät tacia FreeBSD: llä tai macOS: lla, pitkä vaihtoehtoinen versio ei välttämättä ole käytettävissä. Kokeile tällöin -v tai man tac. Jos olet kokeillut sitä, kerro siitä minulle. olen utelias. Kiitos
Tac-vaihtoehdot
Apun ja version lisäksi tacilla ei ole paljon vaihtoehtoja. Sillä, mitä sillä on, saat varmasti selville, että tac ei ole mikään vanha käänteinen kissa.
Tac ennen vaihtoehtoa
-B-vaihtoehdon avulla voit muuttaa erottimen kiinnitystä lähtöön. Oletusarvoisesti uuden rivin erotin liitetään jokaisen rivin jälkeen.
Tiedän, että se on hämmentävää. Eritellään se esimerkin avulla.
Katsotaan ensin, mitä tuotoksemme näyttää ennen tac -b: n käyttöä.
Komennot
jakso 10Tuotos
Katsotaan nyt, mistä tuotoksemme muuttuu käytettäessä tacia ilman -b: tä.
Komennot
jakso 10 | tacTuotos
Katsotaan nyt, mistä tuotoksesta tulee tac -b.
Komennot
jakso 10 | tac -bTuotos
Tac-erotinvaihtoehto
Erotusvaihtoehdon -s 'kirjaimellinen merkkijono' avulla voit määrittää merkin tai merkkijonon, jota tac käyttää rivien erottamiseen toisistaan. Oletusarvoisesti käytetään uuden rivin merkkiä ('0a' heksadesimaalina).
Tac-erottimen käyttäminen ei ole aluksi selvää. Kuitenkin, kun tiedät, että se on siellä, on vaikea olla yrittämättä käyttää sitä.
Harkitse seuraavaa esimerkkiä, joka toimii heksalla esitetyillä viivoilla.
Komennot
jakso 20 | xxd -ps | tac -s '0a' | xxd -ps -rTuotos
Huomautuksia
(1) Se saattaa tuntua vähäpätöiseltä kuin käyttää sekvenssiä 20 | tac-komento, mutta siinä tapauksessa emme viettäneet aikaa työskentelemällä lähtövirralla hex-muodossa. Tämän mallin käyttäminen on hyödyllistä, kun erillinen ei ole jotain triviaalia, koska uusi rivimerkki, kuten nolla-tavu.
Yritä nyt vähemmän käyttää tacia hieman vähemmän raakana ja enemmän metaa, kuten yksinkertainen HTML.
Harkitse seuraavaa tiedostoa.
Tiedosto
AB
C
Komennot
tiedosto () echo -e "AB
C
";
tiedosto | tac -s "
"
Tuotos
Onnistuimme muuntamaan HTML-sivun
AB
C
osaksi
CB
A
käyttämällä tac.
Oletetaan, että sinun on tehtävä jotain hieman monimutkaisempaa, kuten kohdella mitä tahansa tagia tac-erottimena. Siinä tapauksessa et aio päästä eroon pelkästään erotinvaihtoehdon käytöstä. Siellä regex-vaihtoehto tulee sisään. Yhdistettynä erotinvaihtoehtoon sen avulla voit tehdä enemmän tac-komennolla kuin rivin kääntäminen tiedostossa. Näin.
Tac regex -vaihtoehto
Regex-vaihtoehdon -r -s 'regex' avulla voit määrittää, että erotinmerkkijonoa on käsiteltävä säännöllisenä lausekkeena.
Tac regex -vaihtoehdon käyttäminen on yhtä yksinkertaista kuin lisäämällä -r-vaihtoehto ennen erotinta tai sen jälkeen.
Harkitse edellistä esimerkkiä käyttämällä regex-vaihtoehtoa yhdessä erotinvaihtoehdon kanssa. Olkoon tac käsitellä mitä tahansa merkintätagia erottimena.
Tiedosto
yksinkertaiset toiminnot
Toiminnot ovat yksinkertaisia bashissa. Ainakin tämä on. Se asettaa merkkijonon näytölle.
Komennot
yksinkertainen toiminto
()
kaiku
niin yksinkertaista kuin se saa yksinkertainen toiminto
Lähde: https: // temptemp3.github.io / bash-toiminnot
Komennot
tiedosto ()kaiku '
yksinkertaiset toiminnot
Toiminnot ovat yksinkertaisia bashissa. Ainakin tämä on. Se asettaa a
merkkijono näytöllä.
Komennot
yksinkertainen toiminto
()
kaiku niin yksinkertaista kuin se saa
yksinkertainen toiminto
tiedosto | tac -r -s "] *."
Tuotos
Onnistuimme muuntamaan HTML-sivun kääntämään tiedoston HTML-tunnisteiden avulla. Jos tutkit yksityiskohtia, huomaat, että se ei ole vielä täydellinen.
Tac-komento puhtaassa bashissa
Tässä on primitiivinen versio tac-työkalusta puhtaassa bashissa, joka kääntää linjat, jotka on johdettu lhs-komennolla. Tulevat versiot jätetään harjoitukseksi.
#!/ bin / bash## tac
## versio 0.0.1 - alkukirjain
#########################################################
tac ()
paikallinen -a arr
paikallinen -i i
mapfile arr -
i = "$ # arr [@]"
kun [$ i -ge 0]
tehdä
kaiku $ arr [i]
olkoon i- = 1
tehty
#########################################################
tac
#########################################################
Lähde: https: // github.fi / temptemp3 / ba.sh / möykky / master / tac.sh
Tac-komento käyttämällä muita komentoja
Tässä on joitain primitiivisiä versioita tac-työvälineistä, jotka käyttävät muita komentoja, jotka kääntävät lhs-komennolla syötetyt linjat. Tulevat versiot jätetään harjoitukseksi.
Ennen kuin aloitamme, sulje silmäsi ja ajattele: "Mitä voitaisiin käyttää primitiivisen version tacista?”
Monet komennot tulevat mieleen, mutta keskityn niihin, joille meillä on tilaa.
gawk
Samoin kuin puhtaassa bash-esimerkissä oleva Tac-komento, tac: n toteuttamiseksi tallennamme ensin toistettavat lukurivit taaksepäin, kun kaikki rivit on luettu. Näin se näyttäisi gawkilla.
gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Yritä nyt käyttää lhs-komentoa seq 10.
jakso 10 | gawk 'line [++ line [0]] = $ (0) END for (i = 0; i
Kuten voit odottaa, tuotos on
Harjoitukset
1. Funktio lhs () seq 10; näyttää kokonaisluvut 1-10. Kirjoita rhs-komento siten, että lhs | rhs on yhtä suuri kuin 10864213579 vain käytettäessä tac (Vihje: katso Tac ennen vaihtoehtoesimerkkiä)
2. Kääntäkää rhs: n tulos () etsi -mindepth 1 -maxdepth 1 -print0; käyttämällä tac-näppäintä (Vihje: katso esimerkki Tac-erottimen vaihtoehdosta)
3. Pidennä tac.sh (Tac-komennossa puhdas bash) käyttäytyä täsmälleen kuten tac. Sinun on lisättävä vaihtoehtoja ja testattava heidän käyttäytymistään.
4. Toteuta primitiivinen versio tac: sta puhtaassa bashissa rekursiivisena toimintona.
TL; DR
Jälleen nautin Bash tac -komennon kirjoittamisesta. Luettuani toivon, että voit olla samaa mieltä siitä, että tacilla on enemmän kuin luulit. Toivon, että kun yrität tehdä asioita kovalla tavalla lähellä pohjaa, tiedät kuinka hyödyllinen tac-komento voisi olla. Jos joku onnistuu suorittamaan jonkin harjoituksista tai tarvitsee apua kotitehtävissään, ilmoita siitä minulle. Kiitos,