Avanceret tekstmanipulation (sed, awk)
Udforsk 'sed' til streamredigering og 'awk' til avanceret tekstbehandling, mønstergenkendelse og dataudtræk.
Avanceret tekstmanipulation (sed, awk) er en gratis Intensiv DevOps-uddannelse-lektion på CoddyKit. Dette er lektion 1 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Intensiv DevOps-uddannelse, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.
Redigering af strømme med sed
sed, en forkortelse for »stream editor«, er et effektivt kommandolinjeværktøj til at fortolke og transformere tekst. Det behandler tekststrømme linje for linje. Tænk på det som en ikke-interaktiv teksteditor.
sed læser en linje, anvender en kommando (f.eks. erstatning eller sletning), udskriver resultatet og går derefter videre til næste linje. Det gør værktøjet meget effektivt til store filer eller data, der sendes gennem en pipe.
Enkel teksterstatning
Den mest almindelige anvendelse af sed er at erstatte tekst. Vi bruger kommandoen s efterfulgt af et skilletegn (ofte /), det mønster, der skal findes, endnu et skilletegn, erstatningsteksten og et afsluttende skilletegn.
Syntaks: sed 's/pattern/replacement/' filename
Prøv at erstatte »apple« med »orange« i en eksempelfil:
#!/bin/bash
# Create a sample file
echo "I like red apple." > fruits.txt
echo "My favorite fruit is apple." >> fruits.txt
echo "Another apple here." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command:"
sed 's/apple/orange/' fruits.txt
# Clean up
rm fruits.txtGlobal og ufølsom over for store og små bogstaver
Som standard erstatter sed kun den første forekomst af et mønster på hver linje. Hvis du vil erstatte alle forekomster på en linje, skal du bruge flaget g (globalt).
Hvis du vil udføre en søgning, der ikke skelner mellem store og små bogstaver, skal du bruge flaget i. Du kan kombinere flag, f.eks. gi.
Eksempel: Erstat alle forekomster af "apple" uden at skelne mellem store og små bogstaver med "banana".
#!/bin/bash
# Create a sample file
echo "Apple is good." > fruits.txt
echo "I eat an apple and another Apple." >> fruits.txt
echo "Apples are tasty." >> fruits.txt
echo "Original content:"
cat fruits.txt
echo ""
echo "---"
echo "Running sed command (s/apple/banana/gi):"
sed 's/apple/banana/gi' fruits.txt
# Clean up
rm fruits.txtSletning af linjer med sed
Du kan også bruge sed til at slette hele linjer, der matcher et bestemt mønster. Det gør du med kommandoen d.
Syntaks: sed '/pattern/d' filename
Det er nyttigt til at fjerne uønskede linjer, f.eks. logposter, der indeholder "DEBUG", eller tomme linjer.
Lad os fjerne linjer, der indeholder "error":
#!/bin/bash
# Create a sample file
echo "INFO: User logged in." > log.txt
echo "WARNING: Disk space low." >> log.txt
echo "ERROR: File not found." >> log.txt
echo "INFO: Operation complete." >> log.txt
echo "ERROR: Permission denied." >> log.txt
echo "Original content:"
cat log.txt
echo ""
echo "---"
echo "Running sed command (/error/d):"
sed '/error/d' log.txt
# Clean up
rm log.txtawk: Sprog til mønstersøgning
awk er endnu et effektivt værktøj til tekstbehandling, som ofte bruges til dataudtræk og rapportering. Hvor sed er en strømeditor, minder awk mere om et programmeringssprog, der er udviklet til tekstbehandling.
awk behandler tekstfiler linje for linje ligesom sed. Det opfatter dog hver linje som en "post" og opdeler poster i "felter" (kolonner) baseret på et skilletegn.
Som standard bruger awk blanktegn (mellemrum, tabulatorer) som feltskilletegn.
Adgang til datafelter
I awk henvises der til felter med $1, $2, $3 og så videre. $0 repræsenterer hele linjen.
Du kan udskrive bestemte felter ved hjælp af kommandoen print inden i krøllede parenteser {}. Syntaksen er: awk '{ print $FIELD_NUMBER }' filename
Lad os udskrive det første og tredje felt fra en simpel datafil:
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (print $1, $3):"
awk '{print $1, $3}' data.txt
# Clean up
rm data.txtFiltrering af linjer med awk
Ligesom sed kan awk også filtrere linjer baseret på mønstre. Du angiver et mønster før handlingsblokken. Handlingen udføres kun på linjer, der matcher mønsteret.
Syntaks: awk '/pattern/ { action }' filename
Lad os finde og kun udskrive navnene på personer fra "London":
#!/bin/bash
# Create a sample file
echo "Name Age City" > data.txt
echo "Alice 30 NewYork" >> data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "David 28 London" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (/London/ {print $1}):"
awk '/London/ {print $1}' data.txt
# Clean up
rm data.txtInitialisering og afslutning med awk
awk giver dig mulighed for at angive handlinger, der skal udføres før behandling af linjer (BEGIN-blokken) og efter behandling af alle linjer (END-blokken).
BEGIN-blokke er velegnede til at udskrive overskrifter eller initialisere variabler. END-blokke er perfekte til at udskrive opsummeringer, totaler eller sidefødder.
Lad os tilføje en overskrift og en sidefod til vores resultat:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (BEGIN/END):"
awk 'BEGIN { print "--- User Data ---" } { print $1, $2 } END { print "--- End Report ---" }' data.txt
# Clean up
rm data.txtBetinget logik i awk
Du kan bruge if-sætninger i handlingsblokke i awk til at anvende logik baseret på feltværdier eller andre betingelser. Det gør awk meget effektivt til kompleks datafiltrering og -transformation.
Syntaks: awk '{ if (condition) { action } }' filename
Lad os kun udskrive brugere, der er over 25:
#!/bin/bash
# Create a sample file
echo "Alice 30 NewYork" > data.txt
echo "Bob 24 London" >> data.txt
echo "Charlie 35 Paris" >> data.txt
echo "Diana 27 Berlin" >> data.txt
echo "Original content:"
cat data.txt
echo ""
echo "---"
echo "Running awk command (if $2 > 25):"
awk '{ if ($2 > 25) { print $1, $2 } }' data.txt
# Clean up
rm data.txtHurtigt tjek: sed og awk
Se på følgende indhold i en fil med navnet names.txt:
John Doe,30,New York
Jane Smith,25,London
Peter Jones,40,Paris
Hvilken af følgende kommandoer viser kun navnene (det første felt) på personer, der er over 30?
Opsummering: Kraften i sed og awk
Du har nu udforsket mulighederne i sed til strømredigering og awk til avanceret tekstbehandling!
seder perfekt til simple erstatninger, sletninger og transformationer linje for linje.awker fremragende til at fortolke struktureret tekst, arbejde med felter og anvende betinget logik til dataudtræk og rapportering.
Disse værktøjer er uundværlige til scripting, loganalyse og datamanipulation i Linux-miljøet.
Lær Intensiv DevOps-uddannelse med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 142
- Lektioner
- 568
Ofte stillede spørgsmål
Er lektionen “Avanceret tekstmanipulation (sed, awk)” gratis?
Ja — alle 3 lektioner i læringssporet Intensiv DevOps-uddannelse, inklusive “Avanceret tekstmanipulation (sed, awk)”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Intensiv DevOps-uddannelse-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Avanceret tekstmanipulation (sed, awk)”?
Udforsk 'sed' til streamredigering og 'awk' til avanceret tekstbehandling, mønstergenkendelse og dataudtræk. Du øver dig i Intensiv DevOps-uddannelse med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Intensiv DevOps-uddannelse?
Der kræves ingen tidligere erfaring. Intensiv DevOps-uddannelse på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 1 af 4.
Hvor lang tid tager lektionen “Avanceret tekstmanipulation (sed, awk)”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Intensiv DevOps-uddannelse-lektion?
Ja. Alle Intensiv DevOps-uddannelse-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Avanceret tekstmanipulation (sed, awk)
- Arkivering og komprimering (tar, gzip, unzip)
- Diskforbrug og systemoplysninger (df, du, uname)
- Sortering og deduplikering af data (sort, uniq, cut)