Esimerkkejä Bash Sedistä

Bash Sed Examples



Bashin avulla voit korvata kuvion käyttämällä muuttuvaa laajennusta, kuten ($ {var/pattern/korvaaminen}). Ja niin, toimiiko sed näin (sed -e ’s/pattern/korvaava/’). On kuitenkin paljon muutakin kuin tekstitiedostojen kuvioiden korvaaminen. Täällä löydämme uudelleen sedin esimerkkinä vastaavilla komennoilla ja työnkuluilla päivittäisten tehtävien helpottamiseksi.

Asetus sed -esimerkkeihin

Tässä on pikaopas esimerkin käyttöönottoa varten, jota yritän olla tekemättä liikaa.







sanaton tekstitiedosto, joka sisältää numerot 1 - 100. Jos et ole varma sen luomisesta, katso Bash Export Commandin Xargs -vientitoiminto. Et koskaan tiedä, että se saattaa olla seuraavassa shell -käsikirjoitushaastattelussasi.



baarion tekstitiedosto, joka sisältää yhden rivin -.



vanha phpon tekstitiedosto, joka sisältää vanhan PHP: n rivejä, jotka murtuvat php7: ssä tai uudemmassa. (Vinkki: ereg)





Huomaa, että kaikki yllä kuvatut toiminnot löytyvät alla olevasta Endnote -asetuksesta.

Sed esimerkkejä vastaavilla komennoilla

Komentoriviympäristössä huomaat, että tiettyyn tehtävään on useita ratkaisuja. Suurimmaksi osaksi haluat kuitenkin kulkea polkua, joka tuottaa vähiten vastustusta. Tässä on luettelo esimerkkeistä sed -komennoista ja vastaavista vastaavista komennoista, joista osa käsitellään yksityiskohtaisesti alla.



1. Tulosta satunnainen rivi (vastaa lajittelua -R -| pää -1)

sed -n ''$ ((RANDOM % 100))) p '-

2.Tulosta tiedoston viimeinen rivi (vastaa päätä -1 -)

sed -n '$ p'-

3. Tulosta tiedoston ensimmäiset 10 riviä (vastaa päätä -n 10 -)

sed '10q'-

4. Tulosta tiedoston ensimmäinen rivi (vastaa häntä -1 -)

sed -n '1p'-

5. Poista kaikki merkin esiintymät (vastaa tr -poista '0' -jossa 0 on merkki, jonka haluamme poistaa)

sed -Ja 's / 0 // g'-

6. Muunna csv -tiedosto tsv: ksi (vastaa tr ',' ' t' -)

sed -Ja 's/,/ t/g'-

7.Liitä rivi tiedostoon (vastaa kissapalkkia -)

sed '$ a ---'-

8. Lisää rivi tiedostoon (vastaa kissapalkkia)

sed '1i ---'-

9. Tulosta kaikki tiedoston rivit (vastaa kissaa)

sed -n -Ja 'p'-

10. Tulosta kuvion mukaiset viivat (vastaa grep -e '^1' -)

sed -n -Ja '/^1/ p'-

11. Poista kuvion mukaiset rivit (vastaa grep -v -e ’^1’ -)

sed -Ja '/^1/ d'-

12. Hanki tiedoston rivien määrä (vastaa wc -l -)

sed -n -Ja '$ ='-

13. Kirjoita tiedostoon taustalla (vastaava komento tee)

sed 'sisään{1} $''-

Esimerkki sedin käyttämisestä tee -komennon toteuttamiseen

Aivan yllä on esimerkki Kirjoita tiedostoon taustalla. Kuulostaa vähän tee -komennolta. No se on. Tässä tarkennamme, kuinka toteuttaa toiminto korvata bash käyttäen sed.

Komennot

tee ()
{
testata $ {#} -ekv 1 || palata;
sed 'sisään{1} $''-
}
tärkein()
teeTämä;
kissaTämä

tärkein

Lähtö

1
2
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10

Tässä näet kaksi luetteloa kokonaisluvuista 1-10. Ensimmäinen on komennosta seq. Toinen saamme t -kirjaimen tiedoston kissasta. Tiedän, että se on naurettavaa, mutta se toimii!

Esimerkki satunnaisen rivin tulostamisesta tiedoston sed avulla

Oletetaan, että haluamme tulostaa satunnaisen rivin tiedostosta käyttämällä bash -tiedostoa ja hieman sediä. Voimmeko tehdä sen? Kyllä me voimme! Tässä on ohjeet.

Toteuta toiminto, joka

  1. Hakee tiedoston rivien määrän, L
  2. Luo satunnaisluvun välillä 1 ja L, R
  3. Tulostaa R.

Toiminto odottaa tulon putkistuvan ulkopuolelta.

Komennot

joku linja()
{
toimintolc()
{
sed -n -Ja '$ ='-
};
toimintotulostuslinja()
{
sed -n -Ja ''{1} $p '-
};
lämpötila= $( mktemp );
kissa-> $ {temp};
kissa $ {temp} |print-line $((RANDOM%$( kissa $ {temp} |lc)+1 ));
rm $ {temp}
}

Esimerkki käyttö (1)

seuraava 100 |_

Lähtö (1)

35

Esimerkki käyttö (2)

curl https://linuxhint.com/bash_cut_command/ --hiljainen |nauhatunnisteet|joku linja

Katso alla oleva esimerkki HTML -tunnisteiden poistamiseen sedin avulla. Huomaa, että yli -esimerkki palauttaa joskus tyhjän tyhjien rivien kohdalla. Harjoituksena sitä voi parantaa.

Sedin käyttäminen rivien tulostamiseen tiedostossa

Oletetaan, että haluat toteuttaa funktion bashissa, jotta voit tulostaa tietyn rivin tiedostosta. Yhden rivin tulostaminen tiedostoon käyttämällä bash-, head-, tail- tai awk -silmukkaa on liikaa työtä tiedoston rivien tulostamiseksi. Onneksi meillä on rauha. Tuloksena oleva funktio sedillä olisi seuraava.

Komennot

tulostuslinja()
{
sed -n ''{1} $p '-
}

Katsotaan nyt mitä tapahtuu, kun käytämme print-line-sanoja.

Komennot

sanat|tulostuslinjaviisikymmentä

Lähtö

viisikymmentä

Okei. Näyttää hyvältä, mutta kokeillaan jotain, joka näyttää hieman vähemmän triviaalilta.

Komennot

julistaa -xfsanat
julistaa -xftulostuslinja
seuraava 1 10$(sanat| WC -he ) | xargs-ilyödä -c 'sanat | print-line {} '

Lähtö

1
yksitoista
kaksikymmentäyksi
31
41
51
61
71
81
91

Okei. Nyt se on enemmän sen kaltainen! Näet, kuinka sediä voidaan käyttää bash -komentosarjassa minkä tahansa tiedoston rivin tulostamiseen.

Sed esimerkkejä ilman vastaavia komentoja

Komentoriviympäristössä joskus polku ratkaisuun, joka tuottaa vähiten vastusta, on sed-tapa; muuten teet lopulta enemmän työtä kuin vaaditaan. Jotkin komennot voivat olla alla.

Komenna kaikkia komentosarjan rivejä

sed -Ja 's/^/#/'-
Poista ensimmäinen rivi
sed -Ja '1d'-
Poistaakestäälinja
sed -Ja $ d-
Lisää rivi ennen kuviota vastaavia rivejä
sed '/0 $/i ---'-
Lisää rivi kuviota vastaavien rivien jälkeen
sed ' / 0 $ / ---'-
Irrota html -tunnisteet
sed -Ja 's /†*.// g'-
Päivitä eregsisäänvanha php -koodi ajettavaksisisäänphp7 tai uudempi
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Tarkistaajos sedon aikaisempi kuin tietty versio
sed -Ja 'v 4.5'-

Esimerkki sed -versio, joka haarautuu bashissa

Esimerkkien yläpuolella on rivi, joka tarkistaa, onko sed vanhempi kuin tietty versio, jonka avulla voimme toteuttaa version haarautumisen bashissa, mikä on mielestäni helpompaa kuin yrittää toteuttaa funktio vertaamaan sed -version versiotuloksia . Ainoa sudenkuoppa on, että jos on olemassa aiempi sed -versio, joka ei tue v -komentoa, olemme pulassa.

Komennot

test-sed-version-korkeintaan() {
heitti pois -n | sed 'v{1} $''-2> /dev/tyhjä
}
kokeiluversio()
{
heitti pois -n 'Versio{1} $. Okei. Tee se ';
test-sed-version-korkeintaan{1} $ && {
heitti pois -n 'vanha';
totta
} || {
heitti pois -n 'Uusi'
};
heitti pois 'tapa'.
}
tärkein()
{
paikallinenv;
vartenvsisään 4.{4,5};
tehdä
kokeiluversio$ {v};
tehty
}
tärkein

Lähtö

Versio4.4. Okei. Tee se vanhaan tapaan.
Versio4.5. Okei. Tee se uudella tavalla.

Huomaa, että koneellani toimiva sed -versio näiden merkkien kirjoittamisen jälkeen on 4.4, mikä selittää yllä olevan tuloksen. Lisäksi samaan aikaan gnu sedin uusin versio oli 4,7, noin 3 vuotta vanhempi kuin minulla. Seni on vanha! Itse asiassa sed 4.0.6: ssa versiokomentoon lisättiin parametri, joten tämä strategia toimii kaikille mainituille vähintään versiolle 4.4.6, joka on lievä ottaen huomioon, että versio julkaistiin vuoden 2003 alussa. Olet hyvä.

Tein ylimääräistä kaivaa, oikeastaan ​​NEWS -lukemista uusimmasta lähdekoodista. Versiossa 4.6 on uusi ominaisuus - virheenkorjaus, joka poistaa komentosarjan ja merkitsee tulostusrivit. Tämän avulla voit kääntää bas -funktioiden luomat sed -komentosarjat kanoniseen muotoon. Viileä! Älä vain unohda, että tarvitset sed -version, joka haarautuu bashissa. Siellä tämä sed -esimerkki tulee esille.

Esimerkki bash -toiminnosta, joka käyttää sediä HTML -tunnisteiden poistamiseen

Yllä olevissa esimerkeissä on rivi HTML -tunnisteiden poistamiseksi. Heitetään se bash -funktioon ja poistetaan sen avulla kaikki HTML -tagit viimeisestä kirjoituksestani.

Komennot

nauhatunnisteet()
{
sed -Ja 's /†*.// g'-
}
curl https://linuxhint.com/bash_cut_command/ --hiljainen |nauhatunnisteet

En voi sanoa, että se on täydellinen, mutta ainakin se on luettavissa päätelaitteessa.

Sed -esimerkkejä työnkulkuista: Esimerkki työnkulusta: vaihda kaikki turvallisesti käyttämällä Find, grep ja sed

On turvallista sanoa, että sedillä -i -vaihtoehdolla tehdyt muutokset ovat peruuttamattomia. Eli jos et ole täysin varma, mikä teksti korvataan, sinulla on todennäköisesti yksi merkki vähemmän kuin on tarkoitus. Siksi tässä esimerkissä käytämme sediä työnkulussa korvaamaan tekstin turvallisesti kaikissa valitsemissasi tiedostoissa.

Työnkulku

  1. löytö
  2. pito
  3. sed
löytö

Täältä voit valita tiedostot, jotka on vaihdettava. Ehdotan seuraavan komennon käyttöä:

löytö -tyyppif-nimi | pito -v-Ja| xargs-minä ...

Voit esimerkiksi rajoittaa tiedostoja korvaamaan PHP -tiedostot lukuun ottamatta git -arkiston hakemistoja seuraavasti.

löytö -tyyppif-nimi*.php| pito -v -Ja '.mennä' | xargs -i...

Lue lisää xargs -komennosta bashissa.

pito

Seuraavaksi yritämme sovittaa jotkut_kuvio seuraavissa valituissa tiedostoissa. Huomaa, että koska käytämme -p -vaihtoehtoa grep: lle, tulostuksessa näkyy vain mahdollinen merkkijono.

löytö -tyyppif-nimi*.php| pito -v -Ja '.mennä' |
xargs -i pito -Jasome_pattern-tai

Yllä olevan komennon pitäisi palauttaa merkkijono, joka vastaa jotakin_mallia.

sed

Lopuksi haluamme korvata kaikki jonon_kuvio vastaavat merkkijonot. Tätä varten meidän on muutettava grep sediksi seuraavasti.

löytö -tyyppif-nimi*.php| pito -v -Ja '.mennä' |
xargs -i sed -i -Jas/some_pattern/korvaus/g

Grep -komennosta tulee sed -i ja -o -vaihtoehto poistetaan. Ja siellä sinulla on se.

Nyt voit tarkistaa etukäteen, mitkä merkkijonot korvataan sedissä sen sijaan, että testaisit onneasi.

Esimerkkivaihtoehdot esimerkeissä

Tässä on luettelo lyhyesti käsitellyissä sed -esimerkeissä käytetyistä vaihtoehdoista.

Vaihtoehto Kuvaus
-i Muokkaa paikallaan. Jos tulo on tiedosto (ei syötetty), lausekkeiden tulos korvaa tiedoston sisällön.

Sed hyväksyy yhden

esim. sed -n…

-Ja -e tarkoittaa ilmaisua. Sen parametri on lauseke sed -kielellä.

Sed hyväksyy monia

esim. sed -e'expr1 '-e'expr2'

-n Piilottaa rivin, johon lauseke ei vaikuta. Toisin sanoen jos lauseke on sed -kielellä tulostettu lauseke, tulostuslausekkeeseen kuulumattomia rivejä ei sisällytetä tulostukseen.

esim. sed -n…

Lisätietoja saatavilla olevista sed -vaihtoehdoista on sed -help

Loppuhuomautukset vastaavista komennoista, joita käytetään esimerkeissä

Seuraavat komentorivityökalut sisältyvät sed-esimerkkeihin vastaavilla komennoilla.

  • järjestellä
  • pää
  • häntä
  • pito
  • kissa
  • NS
  • tee

Lopussa oleva huomautus - esimerkiksi vastaavat komennot

Jos mietit, mitä esimerkissä tapahtuu - tämä huomautus on sinua varten. Lisäsin useimpien esimerkkikomentojen jälkeen -merkin vihjataksemme, että odotamme tulon vastaanottavan putken kautta. Tuo on,

kissajokin tiedosto| järjestellä -R-| pää -1

Kuitenkin, kun vasemman käden komento putki on läsnä, voimme jättää vihjeen pois seuraavasti.

kissajokin tiedosto| järjestellä -R | pää -1

Näin tapahtui esimerkkien komennoilla - komennon jälkeen.

Asetusten toimintojen loppuhuomautukset

Jos etsit, tässä on yllä olevien esimerkkien asennustoiminnot. Tulos, joka on saatu käyttämällä deklaraa -f. Lue lisää deklarointikomennosta bashissa, jos haluat lisää käyttötarkoituksia.

Komennot

sanat()
{
seuraava 100
}
baari()
{
heitti pois ---
}
vanha php()
{
heitti pois 'ereg ($ UA,' Bottybot ')'
}

Bottom line

Nautin Bash sed -esimerkkien kirjoittamisesta ja jopa otin muutamia ylimääräisiä temppuja matkan varrella. Sed on tehokas komentorivityökalu ja ilmeikäs kieli tekstitiedostojen käsittelyyn. Jos pidit oppimisesta sedistä, älä huoli, vielä on paljon muutakin koskettavaa. Sed päälle.