Oppsett for sed eksempler
Her er en rask guide for å få satt opp eksemplet, som jeg vil prøve å ikke gjøre for mye.
“Ord” er en tekstfil som inneholder tallene 1 til 100. Hvis du er usikker på kommandoen for å opprette den, se Eksporter-funksjon for xargs i Bash Export Command. Du vet aldri at det kan være på ditt neste shell-skriptintervju.
“Bar” er en tekstfil som inneholder en enkelt linje -.
“Old-php” er en tekstfil som inneholder linjer med gammel PHP som vil brytes i php7 eller senere. (Hint: ereg)
Merk at alle funksjonene som er beskrevet ovenfor, finner du nedenfor i Endnote om funksjoner for oppsett.
Sed eksempler med tilsvarende kommandoer
I et kommandolinjemiljø vil du finne at det er mer enn én løsning på en gitt oppgave. Imidlertid vil du for det meste gå med den veien som gir minst motstand. Her er en liste over eksempler på sed-kommandoer med tilsvarende ekvivalente kommandoer, hvor noen vil bli dekket i detalj nedenfor.
1. Skriv ut en tilfeldig linje (tilsvarer sortering -R - | head -1)
sed -n "$ ((RANDOM% 100)) p" -2.Skriv ut den siste linjen i filen (tilsvarer hodet -1 -)
sed -n '$ p' -3. Skriv ut de ti første linjene i en fil (tilsvarer head -n 10 -)
sed '10q' -4. Skriv ut den første linjen i en fil (tilsvarer halen -1 -)
sed -n '1p' -5. Slett alle forekomster av et tegn (tilsvarer tr -delete '0' -, hvor 0 er tegnet vi vil slette)
sed -e 's / 0 // g' -6. Konverter csv-fil til tsv (tilsvarer tr ', "\ t' -)
sed -e 's /, / \ t / g' -7.Legg til linje til fil (tilsvarer kattelinje -)
sed '$ a ---' -8. Forhåndslinje til fil (tilsvarer cat-bar)
sed '1i ---' -9. Skriv ut alle linjer i filen (tilsvarer katt -)
sed -n -e 'p' -10. Skriv ut linjer som samsvarer med et mønster (tilsvarer grep -e '^ 1' -)
sed -n -e '/ ^ 1 / p' -11. Slett linjer som samsvarer med et mønster (tilsvarer grep -v -e '^ 1' -)
sed -e '/ ^ 1 / d' -12. Få antall linjer i en fil (tilsvarer wc -l -)
sed -n -e '$ =' -1. 3. Skriv til en fil i bakgrunnen (tilsvarende kommandotee)
sed "w $ 1" -Eksempel på bruk av sed for å implementere tee-kommandoen
Rett over er det et eksempel merket Skriv til en fil i bakgrunnen. Det høres ut som tee-kommandoen. Vel, det er det. Her vil vi utvide hvordan du implementerer en funksjon for å erstatte tee in bash ved bruk av sed.
Kommandoer
tee ()test $ # -eq 1 || komme tilbake;
sed "w $ 1" -
hoved ()
seq 10 | tee ti;
katt ti
hoved-
Produksjon
12
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Her vil du se to lister over heltallene fra 1 til 10. Den første er fra seq-kommandoen. Det andre vi får fra katten til filen skrevet i tee. Jeg vet at det er latterlig, men det fungerer!
Eksempel på bruk av sed for å skrive ut en tilfeldig linje i en fil
Anta at vi vil skrive ut en tilfeldig linje i en fil ved hjelp av bash og litt sed. Kan vi gjøre det? Ja vi kan! Dette er hvordan.
Implementere en funksjon som
- Får antall linjer i en fil, L
- Genererer et tilfeldig tall mellom 1 og L, R
- Skriver ut R
Funksjonen forventer at inngangen skal røres fra utsiden.
Kommandoer
noen-linje ()funksjon lc ()
sed -n -e '$ =' -
;
funksjon utskriftslinje ()
sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
katt -> $ temp;
katt $ temp | utskriftslinje $ ((RANDOM% $ (cat $ temp | lc) + 1));
rm $ temp
Eksempel på bruk (1)
seq 100 | _Utgang (1)
35Eksempel på bruk (2)
krølle https: // linuxhint.no / bash_cut_command / --silent | strip-tags | noen-linjeSe eksemplet nedenfor ved å bruke sed for å strippe HTML-koder. Merk at overeksemplet noen ganger returnerer tomt for tomme linjer. Som en øvelse kan den forbedres.
Bruke sed til å skrive ut linjer i en fil
Anta at du vil implementere en funksjon i bash for å skrive ut en gitt linje i en fil. Å prøve å skrive ut en enkelt linje i en fil ved hjelp av en sløyfe i bash, hode, hale eller awk er for mye arbeid for å skrive ut linjer i en fil. Bra at vi har sed. Den resulterende funksjonen ved bruk av sed vil være som følger.
Kommandoer
print-line ()sed -n "$ 1 p" -
La oss nå se hva som skjer når vi bruker utskriftslinje på ord.
Kommandoer
ord | utskrift 50Produksjon
50Greit. Ser bra ut, men la oss prøve noe som ser litt mindre trivielt ut.
Kommandoer
erklære -xf orderklære -xf utskriftslinje
seq 1 10 $ (ord | wc -l) | xargs -i bash -c "ord | utskriftslinje "
Produksjon
111
21
31
41
51
61
71
81
91
Greit. Nå er det mer som det! Du ser hvordan sed kan brukes i et bash-skript for å skrive ut hvilken som helst linje i en fil.
Sed eksempler uten tilsvarende kommandoer
I et kommandolinjemiljø er noen ganger veien til en løsning som gir minst motstand den sedte måten; ellers ender du opp med å gjøre mer arbeid enn nødvendig. Noen kommandoer kan vises nedenfor.
Kommandere alle linjene i et skallskript
sed -e 's / ^ / # /' -Slett første linje
sed -e '1d' -
Slett siste linje
sed -e '$ d' -
Sett inn en linje før linjer som samsvarer med et mønster
sed '/ 0 $ / i ---' -
Sett inn en linje etter linjer som samsvarer med et mønster
sed '/ 0 $ / ---' -
Fjern html-koder
sed -e's /<[^>] *.// g ' -
Oppgrader ereg i gammel php-kode for å kjøre i php7 eller senere
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Sjekk om sed er tidligere enn en bestemt versjon
sed -e 'v 4.5 ' -
Eksempel på sed versjon forgrening i bash
Ovenfor i eksemplene er det en linje for å sjekke om sed er tidligere enn en bestemt versjon som vi kan bruke til å implementere versjonsforgrening i bash, noe jeg mener er enklere enn å prøve å implementere en funksjon for å sammenligne versjonsnumre fra sed -versjonsutgang. Den eneste fallgruven er at hvis det er en tidligere versjon av sed som ikke støtter v-kommandoen, så er vi i trøbbel.
Kommandoer
test-sed-version-at-most ()ekko -n | sed "v $ 1" - 2> / dev / null
prøveversjon ()
ekko -n "Versjon $ 1. Greit. Gjør det ";
test-sed-version-at-most $ 1 &&
ekko -n "gammel";
ekte
||
ekko -n "ny"
;
ekko "måte."
hoved ()
lokal v;
for v i 4.4,5;
gjøre
prøveversjon $ v;
ferdig
hoved-
Produksjon
Versjon 4.4. Greit. Gjør det på den gamle måten.Versjon 4.5. Greit. Gjør det på den nye måten.
Merk at versjonen av sed som kjører på maskinen min når jeg skriver disse tegnene, er 4.4, som vil forklare resultatet ovenfor. Samtidig var den siste versjonen av GNU Sed 4.7, omtrent 3 år eldre enn den jeg har. Sedet mitt er gammelt! Faktisk i sed 4.0.6, ble det lagt til en parameter i versjonskommandoen, slik at denne strategien fungerer for alle nevnte minst v4.0.6, som er mild med tanke på at versjonen ble utgitt tidlig i 2003. Du er god.
Jeg gjorde litt ekstra graving, faktisk NYHETER å lese opp den siste kildekoden. Versjon 4.6 har en ny funksjon, -debug som dumper skriptet og kommenterer utgangslinjene. Dette vil tillate deg å oversette sed-skript generert av funksjoner i bash til kanonisk form. Kul! Bare ikke glem at du trenger forgrenet sed-versjon i bash. Det er her dette sed-eksemplet spiller inn.
Eksempel på bash-funksjon ved bruk av sed for å strippe HTML-koder
I eksemplene ovenfor er det en linje for å fjerne HTML-koder. La oss kaste det i en bash-funksjon og bruke den til å fjerne alle HTML-kodene fra den siste artikkelen jeg skrev.
Kommandoer
strip-tags ()sed -e's /<[^>] *.// g ' -
krølle https: // linuxhint.no / bash_cut_command / --silent | strip-tags
Jeg kan ikke si at den er perfekt, men i det minste er den lesbar i terminalen.
Sed eksempler med arbeidsflyter: Eksempel arbeidsflyt: erstatt trygt alle ved hjelp av find, grep og sed
Det er trygt å si at endringer som er gjort med sed med alternativet -i, er irreversible. Det er med mindre du er helt sikker på hvilken tekst som skal erstattes, det er sannsynlig at du ender opp med ett tegn mindre enn beregnet. Det er grunnen til at vi i dette eksemplet bruker sed i en arbeidsflyt for å trygt erstatte tekst i alle filene du har valgt.
Arbeidsflyt
- finne
- grep
- sed
finne
Her velger du filene som skal erstattes. Jeg foreslår at du bruker en kommando langs disse linjene:
finn -type f -navn | grep -v -e | xargs -i ..Det kan for eksempel være lurt å begrense filene til å erstatte PHP-filer, unntatt git repository kataloger som følger.
finn -type f -navn \ *.php | grep -v -e '.git '| xargs -i ..Les mer om xargs-kommandoen i bash.
grep
Deretter skal vi prøve å matche some_pattern i filene valgt som følger. Merk at siden vi bruker -o-alternativet for grep, vil utdataene bare vise matchet streng hvis noen.
finn -type f -navn \ *.php | grep -v -e '.git '|xargs -i grep -e some_pattern -o
Kommandoen ovenfor skal returnere en liste med streng som samsvarer med some_pattern.
sed
Til slutt vil vi erstatte all streng som samsvarer med noe_mønster. For å gjøre det må vi konvertere grep til sed som følger.
finn -type f -navn \ *.php | grep -v -e '.git '|xargs -i sed -i -e s / some_pattern / erstatning / g
Grep-kommandoen blir sed -i og -o-alternativet fjernes. Og der har du det.
Nå kan du sjekke hvilke strenger som skal byttes ut i sed på forhånd i stedet for å teste lykken.
Sluttnotater om alternativer brukt i eksempler
Her er en liste over alternativer som brukes i sedeksemplene som er diskutert kort.
Alternativ | Beskrivelse |
-Jeg | Rediger på plass. Hvis inndata er en fil (ikke pipet inn), vil resultatet av uttrykk overskrive innholdet i filen. Sed godtar en f.eks) sed -n .. |
-e | -e står for uttrykk. Parameteren er et uttrykk i sed-språket. Sed godtar mange f.eks) sed -e 'expr1' -e 'expr2' ..
|
-n | Skjuler linjen som ikke påvirkes av uttrykket. Det vil si hvis uttrykket er et utskriftsuttalelse på sed-språket, vil ikke linjer som ikke er inkludert i utskriftsuttalelsen, være inkludert i utdataene. f.eks) sed -n ..
|
For mer informasjon om tilgjengelige alternativer, se sed -help
Sluttnotater om tilsvarende kommandoer brukes i eksempler
Følgende kommandolinjeverktøy er inkludert i sed-eksemplene med tilsvarende kommandoer.
- sortere
- hode
- hale
- grep
- katt
- Tr
- tee
Sluttnote om etterfølgende - i eksempel ekvivalente kommandoer
Hvis du lurer på hva som skjer - tegnet i eksemplet, er dette notatet for deg. Jeg la til et tegn etter de fleste kommandoene i eksemplene for å antyde at vi forventer at inngangen skal mottas gjennom et rør. Det er,
katt noen-fil | sorter -R - | hodet -1Når kommandoen på venstre side av røret er til stede, kan vi imidlertid utelate hintet som følger.
katt noen-fil | sorter -R | hodet -1Det var det som skjedde med kommandoer i karakteren etter eksemplene.
Sluttnotater om funksjoner for oppsett
I tilfelle du leter, her er funksjoner til oppsettet for eksemplene ovenfor. Resultatet oppnådd ved bruk av deklarere -f. Les mer på erklær kommandoen i bash for flere bruksområder.
Kommandoer
ord ()seq 100
bar ()
ekko ---
old-php ()
ekko 'ereg ($ UA, "Bottybot")'
Bunnlinjen
Jeg likte å skrive Bash sed eksempler og til og med plukket opp noen ekstra triks underveis. Sed er et kraftig kommandolinjeverktøy og uttrykksfullt språk for å manipulere tekstfiler. Hvis du likte å lære om sed, ikke bekymre deg, det er fortsatt mye mer ennå å bli berørt. Sed på.