Postavljanje primjera sed
Evo kratkog vodiča za postavljanje primjera, koji ću pokušati ne pretjerati.
"Riječi" je tekstualna datoteka koja sadrži brojeve od 1 do 100. Ako niste sigurni u naredbu za njezino stvaranje, pogledajte Izvoz funkcije za xargs u naredbi Bash Export. Nikad ne znate da bi to moglo biti na vašem sljedećem intervjuu za skriptiranje školjki.
"Bar" je tekstualna datoteka koja sadrži jedan redak -.
"Old-php" je tekstualna datoteka koja sadrži retke starog PHP-a koji će se slomiti u php7 ili novijoj verziji. (Savjet: ereg)
Imajte na umu da se sve gore opisane funkcije mogu naći u nastavku u Endnote o funkcijama za postavljanje.
Sed primjeri s ekvivalentnim naredbama
U okruženju naredbenog retka vidjet ćete da postoji više rješenja za zadani zadatak. Međutim, većinom želite ići putem koji daje najmanji otpor. Evo popisa primjera sed naredbi s odgovarajućim ekvivalentnim naredbama, gdje će neke biti detaljno obrađene u nastavku.
1. Ispis slučajnog retka (ekvivalentno sortiranju -R - | glava -1)
sed -n "$ ((RANDOM% 100)) p" -2.Ispis posljednjeg retka u datoteci (ekvivalent glavi -1 -)
sed -n '$ p' -3. Ispis prvih 10 redaka u datoteci (ekvivalentno glavi -n 10 -)
sed '10q' -4. Ispis prvog retka u datoteci (ekvivalentno repu -1 -)
sed -n '1p' -5. Izbrišite sve instance znaka (ekvivalentno tr -delete '0' -, gdje je 0 znak koji želimo izbrisati)
sed -e 's / 0 // g' -6. Pretvori csv datoteku u tsv (ekvivalentno tr ', "\ t' -)
sed -e 's /, / \ t / g' -7.Dodaj redak u datoteku (ekvivalent mačjoj traci -)
sed '$ a ---' -8. Dodavanje retka u datoteku (ekvivalent mački - bar)
sed '1i ---' -9. Ispišite sve retke u datoteci (ekvivalent mački -)
sed -n -e 'p' -10. Ispišite linije koje odgovaraju uzorku (ekvivalentno grep -e '^ 1' -)
sed -n -e '/ ^ 1 / p' -11. Izbrišite linije koje odgovaraju uzorku (ekvivalentno grep -v -e '^ 1' -)
sed -e '/ ^ 1 / d' -12. Dohvatite broj redaka u datoteci (ekvivalent wc -l -)
sed -n -e '$ =' -13. Zapis u datoteku u pozadini (ekvivalentna naredba tee)
sed "w $ 1" -Primjer korištenja sed za provedbu naredbe tee
Odmah iznad, u pozadini je primjer s oznakom Zapisivanje u datoteku. Vrsta zvuka poput zapovijedi tee. Pa je. Ovdje ćemo proširiti kako implementirati funkciju za zamjenu tee u bash pomoću sed.
Naredbe
majica ()test $ # -eq 1 || povratak;
sed "w $ 1" -
glavni ()
slijed 10 | majica deset;
mačka deset
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. Prva je iz naredbe seq. Sekundu dobivamo od mačke datoteke napisane u tee. Znam da je smiješno, ali djeluje!
Primjer upotrebe sed za ispis slučajnog retka u datoteci
Pretpostavimo da želimo ispisati slučajni redak u datoteci koristeći bash i malo sed. Možemo li to učiniti? Da mi možemo! Evo kako.
Provesti funkciju koja
- Dobiva broj redaka u datoteci, L
- Generira slučajni broj između 1 i L, R
- Ispisuje R
Funkcija očekuje da se ulaz cijevi izvana.
Naredbe
neki redak ()funkcija lc ()
sed -n -e '$ =' -
;
funkcija print-line ()
sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
mačka -> $ temp;
mačka $ temp | linija za ispis $ ((SLUČAJNO% $ (mačka $ temp | lc) + 1));
rm $ temp
Primjer upotrebe (1)
slijed 100 | _Izlaz (1)
35Primjer upotrebe (2)
curl https: // linuxhint.com / bash_cut_command / --silent | trake-oznake | neke crticePogledajte primjer u nastavku, koristeći sed za uklanjanje HTML oznaka. Primijetite da se primjer over ponekad vraća prazno za prazne retke. Kao vježba, može se poboljšati.
Korištenje sed za ispis redaka u datoteci
Pretpostavimo da želite implementirati funkciju u bash za ispis određenog 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 pomoću sed bi bila sljedeća.
Naredbe
crta za ispis ()sed -n "$ 1 p" -
Sada da vidimo što će se dogoditi kada koristimo ispisnu liniju na riječima.
Naredbe
riječi | linija za ispis 50Izlaz
50u redu. Izgleda dobro, ali probajmo nešto što izgleda malo manje trivijalno.
Naredbe
izjaviti -xf riječiizjaviti -xf ispisnu liniju
slijed 1 10 $ (riječi | wc -l) | xargs -i bash -c "riječi | crta za ispis "
Izlaz
111
21
31
41
51
61
71
81
91
u redu. Sad je to više slično! Vidite kako se sed može koristiti u bash skripti za ispis bilo kojeg retka u datoteci.
Sed primjeri bez ekvivalentnih naredbi
U okruženju naredbenog retka ponekad je put do rješenja koje daje najmanji otpor sed put; u suprotnom, na kraju ćete obaviti više posla nego što je potrebno. Neke naredbe mogu se naći u nastavku.
Naredite sve retke u skripti ljuske
sed -e 's / ^ / # /' -Izbriši prvi redak
sed -e '1d' -
Izbriši zadnji redak
sed -e '$ d' -
Umetnite liniju prije linija koje odgovaraju uzorku
sed '/ 0 $ / i ---' -
Umetnite redak nakon redaka koji odgovaraju uzorku
sed '/ 0 $ / ---' -
Uklonite html oznake
sed -e 's /<[^>] *.// g ' -
Nadogradite ereg na stari php kôd da bi se izvodio u php7 ili novijoj verziji
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Provjerite je li sed ranije od određene verzije
sed -e 'v 4.5 ' -
Primjer sed verzije koja se grana u bash
Iznad u primjerima postoji redak za provjeru je li sed ranije od određene verzije koji možemo koristiti za implementaciju razgranavanja verzija u bash, što je vjerujem jednostavnije od pokušaja implementacije funkcije za usporedbu brojeva verzija iz izlaza sed -version. Jedina zamka je u tome što ako postoji ranija verzija sed koja ne podržava naredbu v, onda smo u nevolji.
Naredbe
test-sed-version-at-most ()odjek -n | sed "v $ 1" - 2> / dev / null
proba-verzija ()
echo -n "Verzija $ 1. u redu. Učini ";
test-sed-verzija-najviše $ 1 &&
echo -n "stari";
pravi
||
odjek -n "novo"
;
odjek "način."
glavni ()
mjesni v;
za v u 4.4,5;
čini
proba-verzija $ v;
gotovo
glavni
Izlaz
Verzija 4.4. u redu. Učini to na stari način.Verzija 4.5. u redu. Učini to na novi način.
Imajte na umu da je verzija sed na vašem stroju otkucavanjem ovih znakova 4.4, što bi objasnilo gore navedeni rezultat. Također, u isto vrijeme, najnovija verzija gnu sed bila je 4.7, otprilike 3 godine starija od ove koju imam. Moja sed je stara! Zapravo, u sedmici 4.0.6, parametar je dodan naredbi verzije, tako da ova strategija djeluje za bilo koji navedeni barem v4.0.6, što je popustljivo s obzirom na to da je verzija objavljena početkom 2003. Ti si dobar.
Dodatno sam kopao, zapravo VIJESTI čitajući najnoviji izvorni kod. Verzija 4.6 ima novu značajku, -debug koja izbacuje skriptu i bilježi izlazne retke. To bi vam omogućilo da sed skripte generirane funkcijama u bashu prevedete u kanonski oblik. Super! Samo ne zaboravite da vam treba sed verzija koja se grana u bash. Tu dolazi do izražaja ovaj primjer sed.
Primjer bash funkcije pomoću sed za uklanjanje HTML oznaka
U gornjim primjerima postoji redak za uklanjanje HTML oznaka. Ubacimo to u bash funkciju i pomoću nje uklonimo sve HTML oznake iz zadnjeg članka koji sam napisao.
Naredbe
strip-tagovi ()sed -e 's /<[^>] *.// g ' -
curl https: // linuxhint.com / bash_cut_command / --silent | trake-oznake
Ne mogu reći da je savršen, ali barem je čitljiv u terminalu.
Sed primjeri s tijekovima rada: Primjer tijeka rada: sigurno zamijenite sve pomoću find, grep i sed
Sigurno je reći da su promjene izvršene korištenjem sed s opcijom -i nepovratne. To je, osim ako niste potpuno sigurni koji tekst treba zamijeniti, vjerojatno ćete završiti s jednim znakom manje nego što je zamišljeno. Zbog toga ćemo u ovom primjeru koristiti sed u toku rada za sigurnu zamjenu teksta u svim datotekama koje ste odabrali.
Tijek rada
- pronaći
- grep
- sed
pronaći
Ovdje ćete odabrati datoteke koje će biti zamijenjene. Predlažem upotrebu naredbe u ovim redovima:
pronađi -tip f -ime | grep -v -e | xargs -i ..Na primjer, možda ćete htjeti ograničiti datoteke da zamjenjuju PHP datoteke, izuzimajući direktorije git spremišta, kako slijedi.
pronađi -tip f -ime \ *.php | grep -v -e '.git '| xargs -i ..Pročitajte više o naredbi xargs u bashu.
grep
Dalje, pokušat ćemo uskladiti neki_ obrazac u odabranim datotekama na sljedeći način. Imajte na umu da budući da za grep koristimo opciju -o, izlaz će prikazati samo podudarni niz ako postoji.
pronađi -tip f -ime \ *.php | grep -v -e '.git '|xargs -i grep -e neki_uzorak -o
Gornja naredba trebala bi vratiti popis niza koji se podudaraju s nekim_ uzorkom.
sed
Konačno, želimo zamijeniti sve nizove koji se podudaraju s nekim_ uzorkom. Da bismo to učinili trebamo pretvoriti grep u sed kako slijedi.
pronađi -tip f -ime \ *.php | grep -v -e '.git '|xargs -i sed -i -e s / neki_ obrazac / zamjena / g
Naredba grep postaje sed -i, a opcija -o je uklonjena. Eto ti ga.
Sada možete prethodno provjeriti koje će žice biti zamijenjene u sed umjesto da iskušavate svoju sreću.
Bilješke uz opcije korištene u primjerima
Ovdje je popis opcija korištenih u sedim primjerima koji su ukratko razmatrani.
Opcija | Opis |
-ja | Uredite na mjestu. Ako je unos datoteka (koja nije u cijevi), rezultat izraza će prebrisati sadržaj datoteke. Sed prihvaća jednog npr.) sed -n… |
-e | -e označava 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 iskaz za ispis na jeziku sed, tada redovi koji nisu uključeni u ispis neće biti uključeni u izlaz. npr.) sed -n…
|
Za više dostupnih opcija sed, pogledajte sed -help
Završne bilješke o ekvivalentnim naredbama koje se koriste u primjerima
Sljedeći uslužni programi naredbenog retka uključeni su u primjere sed s ekvivalentnim naredbama.
- vrsta
- glava
- rep
- grep
- mačka
- Tr
- tee
Završna bilješka na pratećem - u primjeru ekvivalentnih naredbi
U slučaju da se pitate što se događa u znaku - primjer, ova napomena je za vas. Dodao sam znak - nakon većine naredbi u primjerima kako bih nagovijestio da očekujemo da se ulaz prima kroz cijev. To je,
mačka neka datoteka | razvrstaj -R - | glava -1Međutim, kada je prisutna naredba s lijeve strane cijevi, savjet možemo izostaviti na sljedeći način.
mačka neka datoteka | razvrstaj -R | glava -1To se događalo sa znakom - nakon naredbi u primjerima.
Bilješke o funkcijama za postavljanje
U slučaju da tražite, ovdje su funkcije postavljanja za gornje primjere. Izlaz dobiven pomoću proglašenja -f. Pročitajte više o naredbi declare u bashu za više upotreba.
Naredbe
riječi ()slijed 100
traka ()
jeka ---
stari-php ()
echo 'ereg ($ UA, "Bottybot")'
Poanta
Uživao sam u pisanju primjera Bash sed, a usput sam čak i pokupio nekoliko dodatnih trikova. Sed je moćan uslužni program naredbenog retka i izražajan jezik za manipulaciju tekstualnim datotekama. Ako ste voljeli učiti o sed, ne brinite se još puno toga što još treba dotaknuti. Sed na.