Hver systemadministrator skal dagligt håndtere almindelige tekstfiler. At vide, hvordan man ser bestemte sektioner, hvordan man udskifter ord og hvordan man filtrerer indhold fra disse filer, er færdigheder, du skal have praktisk uden at skulle foretage en Google -søgning.
I denne artikel vil vi gennemgå sed, den velkendte stream editor, og dele 15 tips til at bruge den for at nå de tidligere nævnte mål og meget mere.
Værktøjer som f.eks hoved og hale lad os se bunden eller toppen af en fil. Hvad hvis vi skal se et afsnit i midten? Følgende sed one-liner vil returnere linjer 5 igennem 10 fra myfile.txt:
# sed -n '5,10p' myfile.txt.
På den anden side er det muligt, at du vil udskrive hele filen undtagen et bestemt område. For at udelukke linjer 20 igennem 35 fra myfile.txt, gør:
# sed '20, 35d 'myfile.txt.
Det er muligt, at du er interesseret i et sæt ikke-på hinanden følgende linjer eller i mere end et område. Lad os vise linjer 5-7 og 10-13 fra myfile.txt:
# sed -n -e '5,7p' -e '10, 13p 'myfile.txt.
Som du kan se, -e
option giver os mulighed for at udføre en given handling (i dette tilfælde udskrive linjer) for hvert område.
At erstatte hver forekomst af ordet version
med historie
i myfile.txt, gør:
# sed 's/version/story/g' myfile.txt.
Derudover kan du overveje at bruge gi
i stedet for g
for at ignorere store og små bogstaver:
# sed 's/version/story/gi' myfile.txt.
For at erstatte flere tomme mellemrum med et enkelt mellemrum, vil vi bruge output af ip ruteshow
og en pipeline:
# ip ruteshow | sed 's/ *// g'
Sammenlign output af ip ruteshow
med og uden rørledningen:
Hvis du kun er interesseret i at erstatte ord inden for et linjeområde (30 igennem 40f.eks.), kan du gøre:
# sed '30, 40 s/version/story/g 'myfile.txt.
Selvfølgelig kan du angive en enkelt linje gennem det tilsvarende nummer i stedet for et område.
Nogle gange er konfigurationsfiler indlæst med kommentarer. Selvom dette bestemt er nyttigt, kan det være nyttigt at vise konfigurationsdirektiverne nogle gange, hvis du vil se dem alle på et øjeblik.
For at fjerne tomme linjer eller dem, der begynder med #
fra Apache -konfigurationsfilen, gør:
# sed '/^# \ |^$ \ | *#/d 'httpd.conf.
Caret -tegnet efterfulgt af nummertegnet (^#)
angiver begyndelsen på en linje, hvorimod ^$
repræsenterer tomme linjer. De lodrette søjler angiver boolske operationer, hvorimod baglæns skråstreg bruges til at undslippe de lodrette stænger.
I dette særlige tilfælde har Apache -konfigurationsfilen linjer med #’Er
ikke i begyndelsen af nogle linjer, så *#
bruges også til at fjerne dem.
For at erstatte et ord, der begynder med store eller små bogstaver med et andet ord, kan vi også bruge sed. For at illustrere det, lad os erstatte ordet lynlås eller Lynlås med rar i myfile.txt:
# sed 's/[Zz] ip/rar/g' myfile.txt.
Gå ikke glip af:Brug Awk med regulære udtryk til at filtrere tekst i filer
En anden brug af sed består i at udskrive linjerne fra en fil, der matcher et givet regulært udtryk. For eksempel kan vi være interesserede i at se de autorisations- og godkendelsesaktiviteter, der fandt sted den 2. juli, ifølge pr /var/log/secure log ind a CentOS 7 server.
I dette tilfælde er mønsteret at søge efter 2. juli i begyndelsen af hver linje:
# sed -n '/^1. juli/p'/var/log/secure.
Med sed, kan vi også indsætte mellemrum (tomme linjer) for hver ikke-tom linje i en fil. For at indsætte en tom linje hver anden linje i LICENS, en ren tekstfil, gør:
# sed G minfil.txt.
Gør følgende for at indsætte to tomme linjer:
# sed 'G; G 'minfil.txt.
Tilføj en store bogstaver G adskilt af et semikolon, hvis du vil tilføje flere tomme linjer. Følgende billede illustrerer eksemplet i dette tip:
Dette tip kan være praktisk, hvis du vil inspicere en stor konfigurationsfil. Hvis du indsætter et tomt mellemrum hver anden linje og leder output til mindre, vil det resultere i en mere venlig læseoplevelse.
Det dos2unix program konverterer almindelige tekstfiler fra Windows/Mac -formatering til Unix/Linux og fjerner skjulte nylinjetegn indsat af nogle tekstredigerere, der bruges på disse platforme. Hvis det ikke er installeret i dit Linux -system, kan du efterligne dets funktionalitet med sed i stedet for at installere det.
På billedet til venstre kan vi se flere DOS newline -tegn (^M)
, som senere blev fjernet med:
# sed -i 's/\ r //' minfil.txt.
Bemærk venligst, at -jeg
indstilling angive redigering på stedet. Derefter returneres ændringer ikke til skærmen, men gemmes i filen.
Bemærk: Du kan indsætte DOS newline -tegn mens redigering af en fil i vim editor med Ctrl+V
og Ctrl+M.
.
I det forrige tip brugte vi sed for at ændre en fil, men gemte ikke den originale fil. Nogle gange er det en god idé at gemme en sikkerhedskopi af den originale fil for sikkerheds skyld.
For at gøre det skal du angive et suffiks efter -jeg
mulighed (inde i enkelte anførselstegn), der skal bruges til at omdøbe den originale fil.
I det følgende eksempel vil vi erstatte alle forekomster af dette eller Dette (ignorerer sag) med det i myfile.txt, og vi gemmer den originale fil som myfile.txt.orig.
Endelig vil vi bruge diff -værktøj for at identificere forskellene mellem begge filer:
# sed -i'.orig 's/this/that/gi' myfile.txt.
Lad os antage, at du har en fil, der indeholder fulde navne i formatet Fornavn, Efternavn. Hvis du vil behandle filen tilstrækkeligt, kan du skifte Efternavn og Fornavn.
Det kan vi gøre med sed rimelig let:
# sed 's/^\ (.*\), \ (.*\) $/\,/g' names.txt.
På billedet ovenfor kan vi se, at parenteser, der er specialtegn, skal undslippes, ligesom tallene gør det 1 og 2.
Disse tal repræsenterer de fremhævede regulære udtryk (som skal vises inden for parenteser):
Det ønskede output er angivet i formatet Anden kolonne (Efternavn) + komma + plads + Første kolonne (Fornavn). Du er velkommen til at ændre det til hvad du vil.
Nogle gange er udskiftning af alle forekomster af et givet ord, eller et par tilfældige, ikke præcis det, vi har brug for. Måske skal vi udføre udskiftningen, hvis der findes et separat match.
For eksempel vil vi måske udskifte Start med hold op kun hvis ordet services findes i samme linje. I dette scenario er her hvad der vil ske:
Vi skal begynde at feste på arbejde, men lad os huske at starte alle tjenester først.
I den første linje, Start vil ikke blive erstattet med hold op da ordet tjenester ikke forekommer i den linje, i modsætning til den anden linje.
# sed '/services/s/start/stop/g' msg.txt.
Du kan kombinere to eller flere substitutioner en enkelt sed kommando. Lad os erstatte ordene det og linje ind myfile.txt med henholdsvis Dette og vers.
Bemærk hvordan dette kan gøres ved at bruge en almindelig sed substitutionskommando efterfulgt af et semikolon og en anden substitutionskommando:
# sed -i 's/that/this/gi; s/line/vers/gi 'myfile.txt.
Dette tip er illustreret i følgende billede:
Selvfølgelig, sed kan kombineres med andre værktøjer for at skabe mere kraftfulde kommandoer. Lad os f.eks. Bruge eksemplet givet i TIP #4 og udtræk vores IP -adresse fra output fra ip -rute
kommando.
Vi starter med at udskrive kun den linje, hvor ordet src
er. Derefter konverterer vi flere mellemrum til et enkelt. Til sidst skærer vi 9. felt (overvejer et enkelt mellemrum som feltseparator), hvor IP -adressen er:
# ip ruteshow | sed -n '/src/p' | sed -e 's/ *// g' | cut -d '' -f9.
Billedet herunder illustrerer hvert trin i ovenstående kommando:
I denne guide har vi delt 15 tips og tricks til at hjælpe dig med dine daglige systemadministrationsopgaver. Er der et andet tip, du bruger regelmæssigt og gerne vil dele med os og resten af samfundet?
Hvis det er tilfældet, er du velkommen til at give os besked ved hjælp af kommentarformularen herunder. Spørgsmål og kommentarer er også velkomne - vi glæder os til at høre fra dig!
Gå ikke glip af:Beherskelse af Linux 'Awk' kommando med tips og tricks