Linux-kommandoen «rev» er designet for å snu tekststrenger. Den kan prosessere både direkte angitt tekst og innhold fra filer, og på overflaten virker den bemerkelsesverdig enkel. Imidlertid, som med mange kommandolinjeverktøy, avsløres dens sanne potensial først når den kombineres med andre kommandoer.
Kommandoen «rev» er et av de grunnleggende Linux-verktøyene som i utgangspunktet kan virke noe uvanlig. Dens funksjon er enkel: den vender om rekkefølgen på tegn i tekststrenger. Bortsett fra muligheten til å vise en hjelpeside (-h) og versjonsnummeret (-V), aksepterer den ingen ytterligere kommandolinjealternativer.
Så, «rev» snur tekst, og det er alt? Ingen modifikasjoner eller tilleggsfunksjoner? Vel, svaret er både ja og nei. Ja, det finnes ingen alternativer for bearbeiding, men nei, det er absolutt ikke alt den kan brukes til. Denne veiledningen skal demonstrere hvordan du kan kombinere den for å utføre komplekse operasjoner.
Når du benytter «rev» som en byggestein i mer avanserte kommandosekvenser, kommer dens nytte virkelig til syne. «rev» tilhører en gruppe kommandoer (som «tac» og «yes») som fungerer som tilretteleggere. Du vil lettere forstå deres verdi når du ser hvordan de bidrar til økt effektivitet i bruken av andre kommandoer.
Hvordan bruke «rev»-kommandoen
Når «rev» brukes på kommandolinjen uten ekstra parametere, vil den motta all tekstinntasting, reversere den og deretter vise den i terminalvinduet. Dette fortsetter til du avbryter prosessen med Ctrl+C.
rev
Dersom du skriver inn en tekst og trykker Enter, vil «rev» skrive ut teksten i motsatt rekkefølge – med mindre du selvfølgelig har skrevet et palindrom.
Sende tekst til «rev»
Du kan bruke «echo» for å sende tekst til «rev».
echo one two three | rev
Du kan også bruke «rev» til å snu innholdet i en hel tekstfil, linje for linje. I dette eksemplet har vi en fil som inneholder en liste over filnavn. Filen heter «filelist.txt».
rev filelist.txt
Hver linje blir lest fra filen, snudd, og deretter skrevet ut i terminalvinduet.
Kombinere «rev» med andre kommandoer
Her er et eksempel der vi bruker pipe for å sende inndata og kaller «rev» to ganger.
Denne kommandoen fjerner det siste tegnet i en tekststreng. Dette kan være nyttig for å fjerne tegnsetting. Vi trenger «cut»-kommandoen for å fjerne tegnet.
echo 'Remove punctuation.' | rev | cut -c 2- | rev
La oss se på hvordan dette fungerer steg for steg.
«echo» sender strengen til det første kallet av «rev».
«rev» snur strengen og sender den videre til «cut».
«-c» (tegn) forteller «cut» å hente ut en sekvens av tegn fra strengen.
«2-» forteller «cut» å returnere tegn fra posisjon to til slutten av linjen. Hvis et annet tall hadde vært brukt, for eksempel 2-5, ville området vært fra tegn to til fem. Uten andre tall betyr det «til slutten av strengen».
Den reverserte strengen – uten det første tegnet – blir sendt til «rev» som snur strengen tilbake til sin opprinnelige rekkefølge.
Fordi vi fjernet det første tegnet i den snudde strengen, fjernet vi i realiteten det siste tegnet i den opprinnelige strengen. Ja, dette kan også gjøres med «sed» eller «awk», men denne metoden har en enklere syntaks.
Å isolere det siste ordet
Vi kan bruke en lignende teknikk for å hente ut det siste ordet i en linje.
Kommandoen er lik den forrige: den bruker også «rev» to ganger. Forskjellene ligger i hvordan «cut» brukes til å velge ut deler av teksten.
echo 'Separate the last word' | rev | cut -d' ' -f1 | rev
Her er en oversikt over hvordan kommandoen fungerer:
«echo» sender strengen til det første kallet av «rev».
«rev» snur strengen og sender den videre til «cut».
«-d» «» (skilletegn) forteller «cut» å returnere tegn avgrenset av et mellomrom.
«-f1» forteller «cut» å returnere den første delen av strengen som ikke inneholder skilletegnet. Med andre ord, første del av setningen opp til første mellomrom.
Det reverserte første ordet sendes til «rev» som snur strengen tilbake til sin opprinnelige rekkefølge.
Siden vi hentet ut det første ordet i den snudde strengen, fjernet vi det siste ordet i den opprinnelige strengen. Det siste ordet i setningen var «word», og det er det som skrives ut.
Fjerne innhold fra filer
La oss anta at vi har en fil som inneholder en liste over filnavn, og at disse filnavnene er omsluttet av anførselstegn. Vi ønsker å fjerne anførselstegnene fra filnavnene.
La oss først se på filen:
less filelist.txt
Innholdet i filen vises med «less».
Vi kan fjerne tegnsettingen fra begge ender av hver linje med følgende kommando. Denne kommandoen benytter både «rev» og «cut» to ganger.
rev filelist.txt | cut -c 2- | rev | cut -c 2-
Filnavnene vises nå uten anførselstegn.
Kommandoen fungerer på denne måten:
«rev» snur linjene i filen og sender dem videre til «cut».
«-c» (tegn) forteller «cut» å returnere en sekvens av tegn fra hver linje.
«2-» forteller «cut» å returnere tegn fra posisjon to til slutten av hver linje.
De reverserte strengene, minus deres første tegn, sendes til «rev».
«rev» snur strengene tilbake til sin opprinnelige rekkefølge. De sendes så videre i en pipe igjen.
«-c» (tegn) forteller «cut» å returnere en sekvens av tegn fra hver streng.
«2-» forteller «cut» å returnere tegn fra posisjon to til slutten av hver linje. Dette «hopper over» anførselstegnene, som er det første tegnet på hver linje.
En lang rekke med pipes
Her er en kommando som returnerer en sortert liste over hver filtype i gjeldende mappe. Den benytter seg av fem forskjellige Linux-kommandoer.
ls | rev | cut -d'.' -f1 | rev | sort | uniq
Prosessen er som følger:
«ls» viser filene i gjeldende mappe. Disse sendes videre til «rev».
«rev» snur filnavnene og sender dem til «cut».
«cut» returnerer den første delen av hvert filnavn opp til et skilletegn. «-d».» forteller «cut» å bruke punktum «.» som skilletegn. Delen av de reverserte filnavnene frem til det første punktumet er filtypene. Disse sendes videre til «rev».
«rev» snur filtypene tilbake til sin opprinnelige rekkefølge. De sendes så videre til «sort».
«sort» sorterer filtypene og sender resultatene til «uniq».
«uniq» returnerer en enkelt oppføring for hver type unik filtype. Merk at dersom det ikke finnes en filtype (som for makefilen og mappene Help og gc_help), blir hele filnavnet listet opp.
For å sette prikken over i-en, kan du legge til «-c» (count) kommandolinjealternativet til «uniq»-kommandoen.
ls | rev | cut -d'.' -f1 | rev | sort | uniq -c
Vi får nå en sortert liste over de forskjellige filtypene i gjeldende mappe, sammen med en telling av hver filtype.
Det er en ganske elegant enlinjer!
drawroF og ot drawkcaB gnioG
Noen ganger må du gå bakover for å gå fremover. Og som regel går du raskest fremover når du er en del av et team.
Legg «rev» til samlingen av dine favorittkommandoer, og du vil snart oppdage at du bruker den til å forenkle ellers kompliserte kommandosekvenser.