Nastavitev za primere sed
Tukaj je kratek vodnik za nastavitev primera, ki ga ne bom preveč pretiraval.
besedeje besedilna datoteka, ki vsebuje številke od 1 do 100. Če niste prepričani o ukazu, ki ga želite ustvariti, glejte funkcijo izvoza za xargs v ukazu Bash Export. Nikoli ne veš, da bo to morda na tvojem naslednjem intervjuju za skriptovanje lupine.
barje besedilna datoteka, ki vsebuje eno vrstico -.
old-phpje besedilna datoteka, ki vsebuje vrstice starega PHP, ki se bodo zlomile v php7 ali novejši. (Namig: ereg)
Upoštevajte, da vse zgoraj opisane funkcije najdete spodaj v Endnotu o funkcijah za nastavitev.
Sed primeri z enakovrednimi ukazi
V okolju ukazne vrstice boste ugotovili, da je za določeno nalogo več rešitev. Večinoma pa želite iti po poti, ki daje najmanj odpora. Tu je seznam primerov ukazov sed z ustreznimi enakovrednimi ukazi, kjer bodo nekateri podrobneje obravnavani spodaj.
1. Natisnite naključno vrstico (enakovredno sortiranju -R -| glava -1)
sed -n '$ ((RANDOM % 100)) p '-2. Natisnite zadnjo vrstico v datoteki (enakovredno glavi -1 -)
sed -n '$ p'-3. Natisnite prvih 10 vrstic v datoteki (kar ustreza glavi -n 10 -)
sed '10q'-4. Natisnite prvo vrstico v datoteki (enakovredno rep -1 -)
sed -n '1p'-5. Izbrišite vse primerke znaka (enakovredno tr –delete ‘0’ -, kjer je 0 znak, ki ga želimo izbrisati)
sed -In 's / 0 // g'-6. Pretvorite datoteko csv v tsv (enakovredno tr ',' ' t' -)
sed -In 's/,/ t/g'-7. Dodajte vrstico v datoteko (enakovredno mačji vrstici -)
sed '$ a ---'-8. Predhodna vrstica v datoteko (enakovredno cat -bar)
sed '1i ---'-9. Natisnite vse vrstice v datoteki (enakovredno cat -)
sed -n -In 'p'-10. Natisnite vrstice, ki ustrezajo vzorcu (enakovredno grep -e ‘^1’ -)
sed -n -In '/^1/ p'-11. Izbrišite vrstice, ki ustrezajo vzorcu (enakovredno grep -v -e ‘^1’ -)
sed -In '/^1/ d'-12. Pridobite število vrstic v datoteki (enakovredno wc -l -)
sed -n -In '$ ='-13. Pisanje v datoteko v ozadju (enakovredna ukazna majica)
sed 'v{1} USD'-Primer uporabe sed za izvedbo ukaza tee
Tik zgoraj je primer z napisom Zapis v datoteko v ozadju. Nekako zveni kot ukaz tee. No, res je. Tukaj bomo razširili, kako implementirati funkcijo za zamenjavo tee v bash z uporabo sed.
Ukazi
majica (){
preskus $ {#} -ekv 1 || vrnitev;
sed 'v{1} USD'-
}
glavni()
majicato;
mačkato
glavni
Izhod
12
3
4
5
6
7
8
9
10
1
2
3
4
5
6
7
8
9
10
Tu boste videli dva seznama celih števil od 1 do 10. Prvi je iz ukaza seq. Drugo dobimo iz mačke datoteke, napisane v tee. Vem, da je smešno, vendar deluje!
Primer uporabe sed za tiskanje naključne vrstice v datoteki
Recimo, da želimo natisniti naključno vrstico v datoteki z uporabo bash in malo sed. Ali lahko to storimo? Ja lahko! Evo kako.
Izvedite funkcijo, ki
- Dobi število vrstic v datoteki, L
- Ustvari naključno število med 1 in L, R
- Natisne R.
Funkcija pričakuje, da bo vhod doveden od zunaj.
Ukazi
nekaj vrstice(){
funkcijolc()
{
sed -n -In '$ ='-
};
funkcijoprint-line()
{
sed -n -In '{1} USDp '-
};
temp= $( mktemp );
mačka-> $ {temp};
mačka $ {temp} |print-line $((NAKLJUČEN%$( mačka $ {temp} |lc)+1 ));
rm $ {temp}
}
Primer uporabe (1)
seq 100 |_Izhod (1)
35Primer uporabe (2)
curl https://linuxhint.com/bash_cut_command/ -tiho |strip-tags|nekaj vrsticeOglejte si spodnji primer, s katerim sed odstranite oznake HTML. Upoštevajte, da zgornji primer včasih vrne prazno za prazne vrstice. Kot vajo jo je mogoče izboljšati.
Uporaba sed za tiskanje vrstic v datoteko
Recimo, da želite implementirati funkcijo v bash, da natisnete dano vrstico v datoteki. Poskus natisniti eno vrstico v datoteki z uporabo zanke v bash, head, tail ali awk je preveč dela za tiskanje vrstic v datoteki. Še dobro, da imamo sed. Nastala funkcija z uporabo sed bi bila naslednja.
Ukazi
print-line(){
sed -n '{1} USDp '-
}
Zdaj pa poglejmo, kaj se zgodi, ko uporabljamo print-line za besede.
Ukazi
besede|print-linepetdesetIzhod
petdesetV redu. Izgleda dobro, vendar poskusimo nekaj, kar izgleda nekoliko manj trivialno.
Ukazi
izjaviti -xfbesedeizjaviti -xfprint-line
seq 1 10$(besede| stranišče - ) | xargs-jazbash -c 'besede | print-line {} '
Izhod
1enajst
enaindvajset
31
41
51
61
71
81
91
V redu. Zdaj je to bolj podobno! Vidite, kako se lahko sed uporabi v bash skriptu za tiskanje katere koli vrstice v datoteki.
Sed primeri brez enakovrednih ukazov
V okolju ukazne vrstice je včasih pot do rešitve z najmanjšim uporom sed način; sicer boste na koncu opravili več dela, kot je potrebno. Spodaj so predstavljeni nekateri ukazi.
Ukažite vse vrstice v skriptu lupine
sed -In 's/^/#/'-Izbrišite prvo vrstico
sed -In '1d'-
Izbrišizadnjivrstica
sed -In '$ d'-
Vrstico vstavite pred vrstice, ki ustrezajo vzorcu
sed '/0 $/i ---'-
Vnesite vrstico za vrstice, ki ustrezajo vzorcu
sed ' / 0 $ / ---'-
Odstranite oznake html
sed -In 's/*** .// g'-
Nadgradi eregvstara php koda za zagonvphp7 ali novejši
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Preveriteče sedje starejša od določene različice
sed -In 'v 4.5'-
Primer sed različice, ki se razveja v bash
Zgoraj v primerih je vrstica za preverjanje, če je sed starejša od določene različice, ki jo lahko uporabimo za implementacijo razvejanja različic v bash, kar je po mojem mnenju lažje kot poskus izvajanja funkcije za primerjavo številk različic iz sed -verzije . Edina napaka je, da če obstaja starejša različica sed, ki ne podpira ukaza u, smo v težavah.
Ukazi
test-sed-version-at-most() {vrgel ven -n | sed 'v{1} USD'-2> /dev/nič
}
poskusna različica()
{
vrgel ven -n 'Različica{1} USD. V redu. Naredi ';
test-sed-version-at-most{1} USD && {
vrgel ven -n 'star';
prav
} || {
vrgel ven -n 'novo'
};
vrgel ven 'način.'
}
glavni()
{
lokalnov;
zavv 4.{4,5};
naredi
poskusna različica$ {v};
Končano
}
glavni
Izhod
Različica4.4. V redu. Naredi po starem.Različica4.5. V redu. Naredite to na nov način.
Upoštevajte, da je različica sed, ki se pri vnosu teh znakov izvaja na mojem računalniku, 4.4, kar bi pojasnilo zgornji izhod. Prav tako je bila hkrati zadnja različica gnu sed 4.7, približno 3 leta starejša od moje. Moj sed je star! Pravzaprav je bil v sed 4.0.6 ukazu različice dodan parameter, zato ta strategija deluje za vse omenjene vsaj v4.0.6, kar je prizanesljivo glede na to, da je bila različica izdana v začetku leta 2003. Dobro ste.
Nekaj sem še brskal, pravzaprav NOVICE prebral iz najnovejše izvorne kode. Različica 4.6 ima novo funkcijo - debug, ki izpiše skript in označi izhodne vrstice. To bi vam omogočilo prevod skriptov sed, ki jih generirajo funkcije, v bash v kanonično obliko. Kul! Samo ne pozabite, da potrebujete sed različico, ki se razveja v bash. Tu nastopi ta primer sed.
Primer funkcije bash z uporabo sed za odstranjevanje oznak HTML
V zgornjih primerih je vrstica za odstranitev oznak HTML. Vrzimo to v funkcijo bash in z njo odstranimo vse oznake HTML iz zadnjega članka, ki sem ga napisal.
Ukazi
strip-tags(){
sed -In 's/*** .// g'-
}
curl https://linuxhint.com/bash_cut_command/ -tiho |strip-tags
Ne morem reči, da je popoln, vendar je vsaj berljiv v terminalu.
Primeri sed s poteki dela: Primer poteka dela: varno zamenjajte vse z uporabo find, grep in sed
Lahko rečemo, da so spremembe, narejene z uporabo sed z možnostjo -i, nepopravljive. Če ne boste popolnoma prepričani, katero besedilo želite zamenjati, boste verjetno na koncu dobili en znak manj, kot je bilo predvideno. Zato bomo v tem primeru v delovnem toku uporabili sed za varno zamenjavo besedila v vseh datotekah, ki ste jih izbrali.
Potek dela
- najti
- oprijem
- sed
najti
Tu boste izbrali datoteke, ki jih je treba zamenjati. Predlagam, da uporabite ukaz v teh vrsticah:
najti -tipf-ime | oprijem -v-In| xargs-jaz ...Na primer, morda želite omejiti datoteke, da nadomestijo datoteke PHP, razen imenikov skladišča git, kot sledi.
najti -tipf-ime*.php| oprijem -v -In '.go' | xargs -jaz...Preberite več o ukazu xargs v bash.
oprijem
Nato bomo poskušali ujemati some_pattern v datotekah, izbranih na naslednji način. Upoštevajte, da ker za grep uporabljamo možnost -o, bo izhod prikazal le ujemajoči se niz, če obstaja.
najti -tipf-ime*.php| oprijem -v -In '.go' |xargs -jaz oprijem -Insome_pattern-ali
Zgornji ukaz bi moral vrniti seznam nizov, ki se ujemajo z some_pattern.
sed
Nazadnje želimo zamenjati ves niz, ki se ujema z some_pattern. Če želite to narediti, moramo grep pretvoriti v sed na naslednji način.
najti -tipf-ime*.php| oprijem -v -In '.go' |xargs -jaz sed -jaz -Ins/some_pattern/zamenjavo/g
Ukaz grep postane sed -i in možnost -o se odstrani. In tukaj imate.
Zdaj lahko namesto preizkušanja sreče preverite, katere vrste bodo zamenjane v sed.
Opombe o možnostih, ki se uporabljajo v primerih
Tu je seznam možnosti, ki so na kratko opisane v primerih sed.
Možnost | Opis |
-jaz | Uredite na mestu. Če je vnos datoteka (ni vstavljena), bo rezultat izrazov prepisal vsebino datoteke. Sed sprejme eno npr) sed -n ... |
-In | -e pomeni izraz. Njegov parameter je izraz v sed jeziku. Sed sprejema mnoge npr) sed -e'expr1 '-e'expr2'
|
-n | Skriva vrstico, na katero izraz ne vpliva. To pomeni, da če je izraz izjava za tiskanje v jeziku sed, potem vrstice, ki niso vključene v izjavo za tiskanje, ne bodo vključene v izpis. npr) sed -n ...
|
Za več informacij o razpoložljivih možnostih sed glejte sed –help
Končne opombe o enakovrednih ukazih uporabite v primerih
Naslednji pripomočki ukazne vrstice so vključeni v primere sed z enakovrednimi ukazi.
- razvrsti
- glavo
- rep
- oprijem
- mačka
- NS
- majica
Opomba na koncu - na primer enakovredni ukazi
Če se sprašujete, kaj se dogaja z znakom - v tem primeru, je ta opomba za vas. Za večino ukazov v primerih sem dodal znak -, da bi namignil, da pričakujemo, da bo vnos sprejet po kanalu. Se pravi,
mačkasome-file| razvrsti -R-| glavo -1Ko pa je ukaz na levi strani cevi prisoten, lahko namig izpustimo na naslednji način.
mačkasome-file| razvrsti -R | glavo -1To se je dogajalo z znaki - za ukazi v primerih.
Opombe o funkcijah za nastavitev
Če iščete, so tukaj nastavitvene funkcije za zgornje primere. Rezultat, pridobljen z uporabo deklariranja -f. Preberite več o deklariranju ukaza v bash za več uporab.
Ukazi
besede(){
seq 100
}
bar()
{
vrgel ven ---
}
old-php()
{
vrgel ven 'ereg ($ UA,' Bottybot ')'
}
Spodnja črta
Užival sem v pisanju primerov Bash sed in ob tem celo pobral nekaj dodatnih trikov. Sed je zmogljiv pripomoček ukazne vrstice in izrazen jezik za upravljanje besedilnih datotek. Če vam je bilo všeč učenje o sed, ne skrbite, da se morate dotakniti še veliko več. Sedi naprej.