Oppsett for sed eksempler
Her er en rask guide for å sette deg opp for eksemplet, som jeg vil prøve å ikke gjøre for overkill.
order en tekstfil som inneholder tallene 1 til 100. Hvis du er usikker på kommandoen for å lage den, kan du se Eksportfunksjon for xargs i Bash Export Command. Du vet aldri at det kan være på ditt neste shell -skriptintervju.
barer en tekstfil som inneholder en enkelt linje -.
gammel-phper en tekstfil som inneholder linjer med gammel PHP som vil bryte i php7 eller senere. (Hint: ereg)
Vær oppmerksom på at alle funksjonene beskrevet ovenfor finner du nedenfor i Endnote om funksjoner for oppsett.
Sed eksempler med tilsvarende kommandoer
I et kommandolinjemiljø finner du at det er mer enn én løsning på en gitt oppgave. For det meste vil du imidlertid gå med stien som gir minst motstand. Her er en liste over eksempler på sed -kommandoer med tilsvarende ekvivalente kommandoer, hvor noen vil bli beskrevet i detalj nedenfor.
1. Skriv ut en tilfeldig linje (tilsvarer sortering -R -| hode -1)
sed -n '$ ((RANDOM % 100)) p '-2. Skriv ut den siste linjen i filen (tilsvarer hode -1 -)
sed -n '$ p'-3. Skriv ut de første 10 linjene i en fil (tilsvarer head -n 10 -)
sed '10q'-4. Skriv ut den første linjen i en fil (tilsvarer hale -1 -)
sed -n '1p'-5. Slett alle forekomster av et tegn (tilsvarer tr –delete ‘0’ -, hvor 0 er tegnet vi vil slette)
sed -Og 's / 0 // g'-6. Konverter csv -fil til tsv (tilsvarer tr ‘,’ ‘ t’ -)
sed -Og 's/,/ t/g'-7. Legg linje til fil (tilsvarer kattefelt -)
sed '$ a ---'-8. Forbered linjen til filen (tilsvarer cat -bar)
sed '1i ---'-9. Skriv ut alle linjene i filen (tilsvarer cat -)
sed -n -Og 'p'-10. Skriv ut linjer som matcher et mønster (tilsvarer grep -e ‘^1’ -)
sed -n -Og '/^1/ p'-11. Slett linjer som samsvarer med et mønster (tilsvarer grep -v -e ‘^1’ -)
sed -Og '/^1/ d'-12. Få antall linjer i en fil (tilsvarer wc -l -)
sed -n -Og '$ ='-13. Skriv til en fil i bakgrunnen (tilsvarende kommando tee)
sed 'i$ {1}'-Eksempel på bruk av sed for å implementere tee -kommandoen
Rett over er det et eksempel merket Skriv til en fil i bakgrunnen. Høres litt ut som tee -kommandoen. Vel, det er det. Her vil vi utvide hvordan du implementerer en funksjon for å erstatte tee i bash ved å bruke sed.
Kommandoer
tee (){
test $ {#} -ekv 1 || komme tilbake;
sed 'i$ {1}'-
}
hoved-()
teedette;
kattdette
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 oppføringer av heltallene fra 1 til 10. Den første er fra seq -kommandoen. Den andre får vi fra katten i 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 sendes fra utsiden.
Kommandoer
noen-linje(){
funksjonlc()
{
sed -n -Og '$ ='-
};
funksjonprint-line()
{
sed -n -Og '$ {1}p '-
};
temp= $( mktemp );
katt-> $ {temp};
katt $ {temp} |print-line $((TILFELDIG%$( katt $ {temp} |lc)+1 ));
rm $ {temp}
}
Eksempel på bruk (1)
seq 100 |_Utgang (1)
35Eksempel på bruk (2)
krølle https://linuxhint.com/bash_cut_command/ --stille |strip-tags|noen-linjeSe eksemplet nedenfor ved å bruke sed for å fjerne HTML -tagger. Vær oppmerksom på at overeksemplet noen ganger returnerer tomt for tomme linjer. Som en øvelse kan den forbedres.
Bruk 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 med en sløyfe i bash, hode, hale eller awk er for mye arbeid for å skrive ut linjer i en fil. Godt 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|print-linefemtiProduksjon
femtiGreit. Ser bra ut, men la oss prøve noe som ser litt mindre trivielt ut.
Kommandoer
erklære -xforderklære -xfprint-line
seq 1 10$(ord| toalett -de ) | xargs-Jegbash -c 'ord | print-line {} '
Produksjon
1elleve
tjueen
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 sedvegen; ellers ender du med å gjøre mer arbeid enn nødvendig i utgangspunktet. Noen kommandoer kan vises nedenfor.
Kommander alle linjene i et skallskript
sed -Og 's/^/#/'-Slett første linje
sed -Og '1d'-
Slettsistelinje
sed -Og '$ d'-
Sett inn en linje før linjer som matcher et mønster
sed '/0 $/i ---'-
Sett inn en linje etter linjer som matcher et mønster
sed ' / 0 $ / ---'-
Fjern html -tagger
sed -Og 's /†*.// g'-
Oppgrader eregigammel php -kode som skal kjøresiphp7 eller nyere
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Kryss avhvis seder tidligere enn en bestemt versjon
sed -Og 'v 4.5'-
Eksempel 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 versjonsgrening i bash, som jeg tror 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, er vi i trøbbel.
Kommandoer
test-sed-versjon-på-det meste() {kastet ut -n | sed 'v$ {1}'-2> /dev/null
}
prøveversjon()
{
kastet ut -n 'Versjon$ {1}. Greit. Gjør det ';
test-sed-versjon-på-det meste$ {1} && {
kastet ut -n 'gammel';
ekte
} || {
kastet ut -n 'ny'
};
kastet ut 'måte.'
}
hoved-()
{
lokalv;
tilvi 4.{4,5};
gjøre
prøveversjon$ {v};
gjort
}
hoved-
Produksjon
Versjon4.4. Greit. Gjør det på den gamle måten.Versjon4.5. Greit. Gjør det på den nye måten.
Vær oppmerksom på at versjonen av sed som kjører på min maskin ved å skrive disse tegnene er 4.4, noe som vil forklare utdataene ovenfor. Samtidig var den siste versjonen av gnu sed 4.7, omtrent 3 år eldre enn den jeg har. Min sed er gammel! Faktisk, i sed 4.0.6, ble det lagt til en parameter i versjonskommandoen, så denne strategien fungerer for alle nevnte minst v4.0.6, noe som er mildt med tanke på at versjonen ble utgitt i begynnelsen av 2003. Du er flink.
Jeg gravde litt ekstra, faktisk NEWS ved å lese ut den siste kildekoden. Versjon 4.6 har en ny funksjon, –debug som dumper skriptet og kommenterer utgangslinjer. Dette vil tillate deg å oversette sed skript generert av funksjoner i bash til kanonisk form. Kul! Bare ikke glem at du trenger sed versjon forgrening i bash. Det er her dette sed eksemplet spiller inn.
Eksempel på bash -funksjon ved å bruke sed for å fjerne HTML -koder
I eksemplene ovenfor er det en linje for å fjerne HTML -koder. La oss kaste det inn i en bash -funksjon og bruke den til å fjerne alle HTML -taggene fra den siste artikkelen jeg skrev.
Kommandoer
strip-tags(){
sed -Og 's /†*.// g'-
}
krølle https://linuxhint.com/bash_cut_command/ --stille |strip-tags
Jeg kan ikke si at det er perfekt, men det er i det minste lesbart i terminalen.
Sed eksempler med arbeidsflyter: Eksempel på arbeidsflyt: erstatt alle på en sikker måte ved hjelp av finn, grep og sed
Det er trygt å si at endringer som er gjort med sed med -i -alternativet er irreversible. Det er med mindre du er helt sikker på hvilken tekst som skal erstattes, vil du sannsynligvis ende opp med et tegn mindre enn det som er tiltenkt. Derfor vil vi i dette eksemplet bruke sed i en arbeidsflyt for å trygt erstatte tekst i alle filene du har valgt.
Arbeidsflyt
- finne
- grep
- sed
finne
Her vil du velge filene som skal erstattes. Jeg foreslår at du bruker en kommando langs disse linjene:
finne -typef-Navn | grep -v-Og| xargs-Jeg ...For eksempel kan det være lurt å begrense filene til å erstatte PHP -filer unntatt git repository -kataloger som følger.
finne -typef-Navn*.php| grep -v -Og '.gå' | xargs -Jeg...Les mer om xargs -kommandoen i bash.
grep
Deretter skal vi prøve å matche some_pattern i filene som er valgt som følger. Vær oppmerksom på at siden vi bruker alternativet -o for grep, vil utgangen bare vise matchet streng hvis noen.
finne -typef-Navn*.php| grep -v -Og '.gå' |xargs -Jeg grep -Ognoe_mønster-eller
Kommandoen ovenfor skal returnere en liste over strenger som matcher some_pattern.
sed
Til slutt vil vi erstatte alle strengene som matcher some_pattern. For å gjøre det må vi konvertere grep til sed som følger.
finne -typef-Navn*.php| grep -v -Og '.gå' |xargs -Jeg sed -Jeg -Ogs/noe_mønster/erstatning/g
Grep -kommandoen blir sed -i og alternativet -o 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.
Sluttnoter om alternativer som brukes i eksempler
Her er en liste over alternativer som brukes i sed eksemplene som ble 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 ... |
-Og | -e står for uttrykk. Parameteren er et uttrykk på sed -språket. Sed tar imot mange f.eks) sed -e'expr1 '-e'expr2'
|
-n | Skjuler linje som ikke påvirkes av uttrykket. Det vil si at uttrykket er en utskriftssetning på sed -språket, så vil linjer som ikke er inkludert i utskriftssetningen ikke inkluderes i utskriften. f.eks) sed -n ...
|
For mer 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
- NS
- tee
Sluttnote om den etterfølgende - i eksempel tilsvarende kommandoer
Hvis du lurer på hva som skjer med - -tegnet i eksemplet, er dette notatet noe for deg. Jeg la til et - tegn etter de fleste kommandoene i eksemplene for å antyde at vi forventer at input blir mottatt gjennom et rør. Det er,
kattnoen filer| sortere -R-| hode -1Men når kommandoen på venstre side av røret er tilstede, kan vi utelate hintet som følger.
kattnoen filer| sortere -R | hode -1Det var det som foregikk med - tegnet etter kommandoer i eksemplene.
Sluttnoter om funksjoner for oppsett
Hvis du leter, er det funksjoner for oppsettet for eksemplene ovenfor. Utgangen oppnådd ved hjelp av deklarere -f. Les mer om kommandoen deklar i bash for flere bruksområder.
Kommandoer
ord(){
seq 100
}
bar()
{
kastet ut ---
}
gammel-php()
{
kastet ut 'ereg ($ UA,' Bottybot ')'
}
Bunnlinjen
Jeg likte å skrive Bash sed -eksempler og tok til og med 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 som skal berøres. Sed på.