Postavljanje primjera sed
Evo kratkog vodiča za postavljanje primjera, koji ću pokušati ne pretjerati.
riječije tekstualna datoteka koja sadrži brojeve od 1 do 100. Ako niste sigurni u naredbu za njezino stvaranje, pogledajte Izvoz funkcija za xargs u Bash naredbi za izvoz. Nikad ne znate da je to možda u vašem sljedećem intervjuu za skriptiranje ljuske.
barje tekstualna datoteka koja sadrži jedan redak -.
old-phpje tekstualna datoteka koja sadrži retke starog PHP -a koji će se prekinuti u php7 ili novijoj verziji. (Savjet: ereg)
Imajte na umu da se sve gore opisane funkcije mogu pronaći ispod u Endnoteu o funkcijama za postavljanje.
Primjeri Sed s ekvivalentnim naredbama
U okruženju naredbenog retka vidjet ćete da postoji više od jednog rješenja za zadani zadatak. Međutim, većim dijelom želite ići putem koji daje najmanji otpor. Ovdje je popis primjera sed naredbi s odgovarajućim ekvivalentnim naredbama, gdje će neke biti dolje detaljno obrađene.
1. Ispišite nasumični redak (ekvivalent sortiranju -R -| glava -1)
sed -n '$ ((SLUČAJNO % 100)) p '-2. Ispišite posljednji redak u datoteci (ekvivalent glavi -1 -)
sed -n '$ p'-3. Ispišite prvih 10 redaka u datoteci (ekvivalent glavi -n 10 -)
sed '10q'-4. Ispišite prvi redak u datoteci (ekvivalent rep -1 -)
sed -n '1p'-5. Izbrišite sve instance znaka (ekvivalentno tr –brisati ‘0’ -, gdje je 0 znak koji želimo izbrisati)
sed -I 's / 0 // g'-6. Pretvorite csv datoteku u tsv (ekvivalent tr ',' ' t' -)
sed -I 's/,/ t/g'-7.Dodajte redak u datoteku (ekvivalent cat bar -)
sed '$ a ---'-8. Prethodni redak u datoteku (ekvivalent cat -baru)
sed '1i ---'-9. Ispišite sve retke u datoteci (ekvivalentno cat -)
sed -n -I 'p'-10. Ispišite retke koji odgovaraju uzorku (ekvivalent grep -e ‘^1’ -)
sed -n -I '/^1/ p'-11. Izbrišite retke koji odgovaraju uzorku (ekvivalent grep -v -e ‘^1’ -)
sed -I '/^1/ d'-12. Dobijte broj redaka u datoteci (ekvivalentno wc -l -)
sed -n -I '$ ='-13. Zapisivanje u datoteku u pozadini (ekvivalentna naredba)
sed 'u{1} USD'-Primjer korištenja sed za implementaciju naredbe tee
Odmah iznad nalazi se primjer s oznakom Zapisi u datoteku u pozadini. Vrsta zvukova poput naredbe tee. Pa jest. Ovdje ćemo proširiti kako implementirati funkciju zamjene tee u bash pomoću sed.
Naredbe
tee (){
test $ {#} -ekv 1 || povratak;
sed 'u{1} USD'-
}
glavni()
teeovaj;
mačkaovaj
glavni
Izlaz
12
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Ovdje ćete vidjeti dva popisa cijelih brojeva od 1 do 10. Prvi je iz naredbe seq. Drugi dobivamo od mačke datoteke napisane u tee -u. Znam da je smiješno, ali radi!
Primjer korištenja sed za ispis nasumičnog retka u datoteci
Pretpostavimo da želimo ispisati nasumični redak u datoteci koristeći bash i malo sed. Možemo li to učiniti? Da mi možemo! Evo kako.
Implementirajte funkciju koja
- Dobiva broj redaka u datoteci, L
- Generira slučajni broj između 1 i L, R
- Ispisuje R
Ova funkcija očekuje da će ulaz biti spolja spojen.
Naredbe
neka linija(){
funkcijalc()
{
sed -n -I '$ ='-
};
funkcijaispisna linija()
{
sed -n -I '{1} USDp '-
};
temp= $( mktemp );
mačka-> $ {temp};
mačka $ {temp} |ispisna linija $((SLUČAJNO%$( mačka $ {temp} |lc)+1 ));
rm $ {temp}
}
Primjer upotrebe (1)
slijedeće 100 |_Izlaz (1)
35Primjer uporabe (2)
curl https://linuxhint.com/bash_cut_command/ -tiho |strip-tags|neka linijaPogledajte donji primjer korištenjem sed za uklanjanje HTML oznaka. Imajte na umu da gornji primjer ponekad vraća prazno za prazne retke. Kao vježba, može se poboljšati.
Korištenje sed za ispis linija u datoteci
Pretpostavimo da želite implementirati funkciju u bash za ispis zadanog retka u datoteci. Pokušaj ispisa jednog retka u datoteci pomoću petlje u bash, head, tail ili awk previše je posla za ispis redaka u datoteci. Dobro da imamo sed. Rezultirajuća funkcija korištenjem sed bila bi sljedeća.
Naredbe
ispisna linija(){
sed -n '{1} USDp '-
}
Sada da vidimo što se događa kada koristimo print-line na riječima.
Naredbe
riječi|ispisna linijapedesetIzlaz
pedesetU redu. Izgleda dobro, ali pokušajmo nešto što izgleda malo manje trivijalno.
Naredbe
proglasiti -xfriječiproglasiti -xfispisna linija
slijedeće 1 10$(riječi| zahod - ) | xargs-ibash -c 'riječi | linija za ispis {} '
Izlaz
1jedanaest
dvadeset i jedan
31
41
51
61
71
81
91
U redu. Sad je to već sličnije! Vidite kako se sed može koristiti u bash skripti za ispis bilo kojeg retka u datoteci.
Primjeri Sed bez ekvivalentnih naredbi
U okruženju naredbenog retka ponekad je put do rješenja koje daje najmanji otpor sed način; u protivnom ćete na kraju obaviti više posla nego što je potrebno. Neke naredbe mogu biti navedene u nastavku.
Naredite sve retke u skripti ljuske
sed -I 's/^/#/'-Izbrišite prvi redak
sed -I '1d'-
Izbrisatiposljednjicrta
sed -I '$ d'-
Umetnite redak prije linija koje odgovaraju uzorku
sed '/0 $/i ---'-
Umetnite redak nakon redaka koji odgovaraju uzorku
sed ' / 0 $ / ---'-
Skinite html oznake
sed -I 's/*** .// g'-
Nadogradite eregustari php kod za pokretanjeuphp7 ili noviji
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Čekako sedje ranije od određene verzije
sed -I 'v 4.5'-
Primjer sed verzije koja se grana u bash
Gore u primjerima postoji redak za provjeru je li sed stariji od određene verzije koji možemo upotrijebiti za implementaciju grananja verzije u bash, što je vjerujem lakše nego pokušati implementirati funkciju za usporedbu brojeva verzija iz sed -verzije izlaza . Ta jedina zamka je da ako postoji ranija verzija sed koja ne podržava naredbu v, onda smo u problemu.
Naredbe
test-sed-version-at-most() {izbaciti -n | sed 'v{1} USD'-2> /dev/null
}
try-verzija()
{
izbaciti -n 'Verzija{1} USD. U redu. Učini to ';
test-sed-version-at-most{1} USD && {
izbaciti -n 'star';
pravi
} || {
izbaciti -n 'novi'
};
izbaciti ' put.'
}
glavni()
{
lokalnov;
zavu 4.{4,5};
čini
try-verzija$ {v};
učinjeno
}
glavni
Izlaz
Verzija4.4. U redu. Učinite to na stari način.Verzija4.5. U redu. Učinite to na novi način.
Imajte na umu da je verzija sed -a koja radi na mom stroju od upisivanja ovih znakova 4.4, što bi objasnilo gornji izlaz. Također, u isto vrijeme, najnovija verzija gnu sed bila je 4.7, oko 3 godine starija od one koju imam. Moj sed je star! Zapravo, u sed 4.0.6, naredbi verzije je dodan parametar pa ova strategija funkcionira za sve navedene barem v4.0.6, što je blaže s obzirom da je verzija objavljena početkom 2003. Dobri ste.
Dodatno sam kopao, zapravo NOVOSTI čitajući najnoviji izvorni kod. Verzija 4.6 ima novu značajku, –debug koja ispisuje skriptu i bilježi izlazne retke. To bi vam omogućilo prevođenje sed skripti koje generiraju funkcije u bash u kanonski oblik. Kul! Samo ne zaboravite da vam je potrebna sed verzija koja se grana u bash. Tu dolazi do izražaja ovaj primjer sed.
Primjer bash funkcije pomoću sed za skidanje HTML oznaka
U gornjim primjerima postoji redak za uklanjanje HTML oznaka. Ubacimo to u funkciju bash i upotrijebimo je za uklanjanje svih HTML oznaka iz prošlog članka koji sam napisao.
Naredbe
strip-tags(){
sed -I 's/*** .// g'-
}
curl https://linuxhint.com/bash_cut_command/ -tiho |strip-tags
Ne mogu reći da je savršen, ali barem je čitljiv u terminalu.
Primjeri Sed s tijekovima rada: Primjer tijeka rada: sigurno zamijenite sve pomoću find, grep i sed
Može se sa sigurnošću reći da su promjene napravljene pomoću sed -a s opcijom -i nepovratne. To jest, osim ako niste potpuno sigurni koji tekst želite zamijeniti, vjerojatno ćete završiti s jednim znakom manje od predviđenog. Zato ćemo u ovom primjeru koristiti sed u tijeku rada za sigurnu zamjenu teksta u svim datotekama koje ste odabrali.
Tijek rada
- pronaći
- zahvat
- sed
pronaći
Ovdje ćete odabrati datoteke koje podliježu zamjeni. Predlažem korištenje naredbe u sljedećim redovima:
pronaći -tipf-Ime | zahvat -v-I| xargs-ja ...Na primjer, možda ćete htjeti ograničiti datoteke tako da zamijene PHP datoteke, isključujući direktorije spremišta git na sljedeći način.
pronaći -tipf-Ime*.php| zahvat -v -I '.ići' | xargs -i...Pročitajte više o naredbi xargs u bashu.
zahvat
Zatim ćemo pokušati upariti some_pattern u datotekama odabranim na sljedeći način. Imajte na umu da budući da koristimo -o opciju za grep, izlaz će prikazati samo usklađeni niz ako ga ima.
pronaći -tipf-Ime*.php| zahvat -v -I '.ići' |xargs -i zahvat -Ineki_uzorak-ili
Gornja naredba trebala bi vratiti popis nizova koji odgovaraju some_pattern.
sed
Na kraju, želimo zamijeniti sve nizove koji odgovaraju some_pattern. Da bismo to učinili, moramo pretvoriti grep u sed na sljedeći način.
pronaći -tipf-Ime*.php| zahvat -v -I '.ići' |xargs -i sed -i -Is/neki_uzorak/zamjena/g
Naredba grep postaje sed -i, a opcija -o se uklanja. I eto ga.
Sada možete provjeriti koji će se nizovi zamijeniti u sed -u umjesto da testirate svoju sreću.
Napomene o opcijama koje se koriste u primjerima
Ovdje je popis opcija korištenih u primjerima sed o kojima se ukratko govori.
Opcija | Opis |
-i | Uredite na mjestu. Ako je ulaz datoteka (nije unesena cijevi), rezultat izraza prebrisat će sadržaj datoteke. Sed prihvaća jednu npr. sed -n ... |
-I | -e znači izraz. Njegov je parametar izraz u sed jeziku. Sed prihvaća mnoge npr.) sed -e'expr1 '-e'expr2'
|
-n | Sakriva liniju na koju izraz ne utječe. To jest, ako je izraz ispisni izraz na sed jeziku, tada retci koji nisu uključeni u ispisni iskaz neće biti uključeni u izlaz. npr. sed -n ...
|
Za više informacija o dostupnim opcijama sed, pogledajte sed –help
Završne napomene o ekvivalentnim naredbama koriste se u primjerima
Sljedeći pomoćni programi naredbenog retka uključeni su u primjere sed s ekvivalentnim naredbama.
- vrsta
- glava
- rep
- zahvat
- mačka
- NS
- tee
Završna bilješka na kraju - u primjerima ekvivalentne naredbe
U slučaju da se pitate što se događa s znakom - u primjeru, ova je bilješka za vas. Dodao sam znak - nakon većine naredbi u primjerima kako bi nagovijestio da očekujemo da će ulaz biti primljen kroz cijev. To je,
mačkaneka datoteka| vrsta -R-| glava -1Međutim, kada je prisutna naredba s lijeve strane cijevi, možemo izostaviti nagovještaj na sljedeći način.
mačkaneka datoteka| vrsta -R | glava -1To se događalo s naredbama - znak za naredbom u primjerima.
Napomene o funkcijama za postavljanje
U slučaju da tražite, ovdje su funkcije postavljanja za gornje primjere. Izlaz dobiven pomoću deklariranja -f. Pročitajte više o naredbi declare u bashu za više upotreba.
Naredbe
riječi(){
slijedeće 100
}
bar()
{
izbaciti ---
}
old-php()
{
izbaciti 'ereg ($ UA,' Bottybot ')'
}
Poanta
Uživao sam u pisanju primjera za Bash sed, pa sam čak i usput pokupio nekoliko dodatnih trikova. Sed je moćan uslužni program za naredbeni redak i izražajan jezik za rukovanje tekstualnim datotekama. Ako ste voljeli učiti o sed, ne brinite, ima još puno toga za dotaknuti. Sed na.