Nastavitev primerov sed
Tukaj je kratek vodnik za pripravo primera, ki ga poskušam narediti ne preveč.
"Besede" je besedilna datoteka, ki vsebuje številke od 1 do 100. Če niste prepričani o ukazu za njegovo ustvarjanje, glejte Izvoz funkcije za xargs v ukazu Bash Export. Nikoli ne veste, da bo morda na naslednjem intervjuju za skriptno lupino.
"Bar" je besedilna datoteka, ki vsebuje eno vrstico -.
“Old-php” je besedilna datoteka, ki vsebuje vrstice starega PHP, ki se bodo zlomile v php7 ali novejši. (Namig: ereg)
Upoštevajte, da lahko vse zgoraj opisane funkcije najdete spodaj v opombi o funkcijah za namestitev.
Sed primeri z enakovrednimi ukazi
V okolju ukazne vrstice boste ugotovili, da obstaja več rešitev za določeno nalogo. Vendar pa večinoma želite iti po poti, ki daje najmanj upora. Tu je seznam primerov ukazov sed z ustreznimi enakovrednimi ukazi, kjer bodo nekateri podrobneje opisani spodaj.
1. Natisnite naključno vrstico (enakovredno razvrščanju -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 datoteko (kar ustreza glavi -n 10 -)
sed '10q' -4. Natisnite prvo vrstico v datoteko (enakovredno repu -1 -)
sed -n '1p' -5. Izbriši vse primerke znaka (enakovredno tr -delete '0' -, kjer je 0 znak, ki ga želimo izbrisati)
sed -e 's / 0 // g' -6. Pretvori datoteko csv v tsv (enakovredno tr ', "\ t' -)
sed -e 's /, / \ t / g' -7.Dodaj vrstico v datoteko (enakovredno mačji vrstici -)
sed '$ a ---' -8. Dodaj vrstico v datoteko (enakovredno mački - bar)
sed '1i ---' -9. Natisnite vse vrstice v datoteki (enakovredno cat -)
sed -n -e 'p' -10. Natisnite črte, ki se ujemajo z vzorcem (enakovredno grep -e '^ 1' -)
sed -n -e '/ ^ 1 / p' -11. Izbriši črte, ki se ujemajo z vzorcem (enakovredno grep -v -e '^ 1' -)
sed -e '/ ^ 1 / d' -12. Pridobite število vrstic v datoteki (enakovredno wc -l -)
sed -n -e '$ =' -13. Zapiši v datoteko v ozadju (enakovreden ukaz tee)
sed "w $ 1" -Primer uporabe sed za izvajanje ukaza tee
Desno zgoraj je v ozadju primer z napisom Pisanje v datoteko. Nekako zveni kot ukaz tee. No, je. Tu bomo razširili, kako uporabiti funkcijo za zamenjavo tee v bash z uporabo sed.
Ukazi
majica ()preizkus $ # -eq 1 || vrnitev;
sed "w $ 1" -
glavni ()
zaporedje 10 | majica deset;
mačka deset
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. Prva je iz ukaza seq. Drugo dobimo od mačke datoteke, napisane v tee. Vem, da je smešno, ampak deluje!
Primer uporabe sed za izpis naključne vrstice v datoteki
Recimo, da želimo natisniti naključno vrstico v datoteko z uporabo bash in malo sed. Lahko to storimo? Ja lahko! Evo kako.
Izvedite funkcijo, ki
- Pridobi število vrstic v datoteki, L
- Ustvari naključno število med 1 in L, R
- Natisne R
Funkcija pričakuje, da bo vhod voden od zunaj.
Ukazi
nekaj vrstic ()funkcija lc ()
sed -n -e '$ =' -
;
funkcija print-line ()
sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
mačka -> $ temp;
mačka $ temp | tiskalna vrstica $ ((NAKLJUČNO% $ (mačka $ temp | lc) + 1));
rm $ temp
Primer uporabe (1)
naslednjih 100 | _Izhod (1)
35Primer uporabe (2)
curl https: // linuxhint.com / bash_cut_command / --silent | trak-oznake | nekaj vrsticOglejte si spodnji primer z uporabo sed za odstranjevanje oznak HTML. Upoštevajte, da se zgled včasih za prazne vrstice vrne prazen. Kot vajo jo je mogoče izboljšati.
Uporaba sed za tiskanje vrstic v datoteki
Recimo, da želite v bash izvesti funkcijo za izpis določene vrstice v datoteki. Poskus tiskanja posamezne vrstice 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
tiskalna vrstica ()sed -n "$ 1 p" -
Zdaj pa poglejmo, kaj se zgodi, ko na besedah uporabimo tiskano vrstico.
Ukazi
besede | tiskalna vrstica 50Izhod
50v redu. Videti je dobro, a poskusimo nekaj, kar je videti nekoliko manj malenkostno.
Ukazi
izjavi -xf besedeizjavi -xf print-line
seq 1 10 $ (besede | wc -l) | xargs -i bash -c "besede | črta za tiskanje "
Izhod
111
21
31
41
51
61
71
81
91
v redu. Zdaj je temu bolj všeč! Vidite, kako se sed lahko uporablja v skriptu bash za tiskanje katere koli vrstice v datoteki.
Sed primeri brez enakovrednih ukazov
V okolju ukazne vrstice je včasih pot do rešitve, ki daje najmanjši upor, sed način; v nasprotnem primeru na koncu opravite več dela, kot je zahtevano. Nekateri ukazi so lahko predstavljeni spodaj.
Ukažite vse vrstice v skriptu lupine
sed -e 's / ^ / # /' -Izbriši prvo vrstico
sed -e '1d' -
Izbriši zadnjo vrstico
sed -e '$ d' -
Vstavi črto pred črte, ki se ujemajo z vzorcem
sed '/ 0 $ / i ---' -
Vstavi črto za črtami, ki se ujemajo z vzorcem
sed '/ 0 $ / ---' -
Odstranite html oznake
sed -e 's /<[^>] *.// g ' -
Nadgradite ereg v staro kodo php, da se bo izvajala v različici php7 ali novejši
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Preverite, ali je sed starejši od določene različice
sed -e 'v 4.5 ' -
Primer sed verzije, ki se razveja v bash
Zgoraj v primerih je vrstica za preverjanje, ali je sed starejša od določene različice, ki jo lahko uporabimo za izvajanje razvejanja različic v bash, kar je po mojem mnenju lažje kot poskus izvajanja funkcije za primerjavo številk različic iz izhoda sed -version. Edina pasta je ta, da če obstaja starejša različica sed, ki ne podpira ukaza v, smo v težavah.
Ukazi
test-sed-version-at-most ()odmev -n | sed "v $ 1" - 2> / dev / null
preizkusna različica ()
echo -n "Različica $ 1. v redu. Naredi ";
test-sed-version-at-$ 1 &&
echo -n "star";
prav
||
echo -n "novo"
;
echo "način."
glavni ()
lokalni v;
za v v 4.4,5;
naredi
preizkusna različica $ v;
Končano
glavni
Izhod
Različica 4.4. v redu. Naredi po starem.Različica 4.5. v redu. Naredi to na nov način.
Upoštevajte, da je različica sed, ki deluje na mojem računalniku, od vnosa teh znakov 4.4, kar bi razložilo zgornje rezultate. Hkrati je bila zadnja različica gnu sed 4.7, približno 3 leta starejši od tistega, ki ga imam jaz. Moja sed je stara! Pravzaprav v sedem 4.0.6 je bil ukaz različice dodan parameter, tako da ta strategija deluje za kateri koli omenjeni vsaj v4.0.6, kar je prizanesljivo glede na to, da je bila različica izdana v začetku leta 2003. Dober si.
Naredil sem nekaj dodatnega kopanja, pravzaprav NOVICE, ko sem prebral najnovejšo izvorno kodo. Različica 4.6 ima novo funkcijo, -debug, ki odvrže skript in označi izhodne vrstice. To bi vam omogočilo, da sed skripte, ki jih generirajo funkcije v bashu, prevedete v kanonsko obliko. Kul! Ne pozabite, da potrebujete različico sed, 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 odstranjevanje 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 -e 's /<[^>] *.// g ' -
curl https: // linuxhint.com / bash_cut_command / --silent | trak-oznake
Ne morem reči, da je popoln, vendar je vsaj v terminalu berljiv.
Primeri Sed z delovnimi tokovi: Primer poteka dela: varno zamenjajte vse z uporabo find, grep in sed
Varno lahko rečemo, da so spremembe, opravljene s sed z možnostjo -i, nepopravljive. Če niste popolnoma prepričani, katero besedilo boste zamenjali, boste verjetno dobili en znak manj, kot je bilo predvideno. Zato bomo v tem primeru uporabili sed v poteku dela za varno zamenjavo besedila v vseh izbranih datotekah.
Potek dela
- najti
- grep
- sed
najti
Tu boste izbrali datoteke, ki jih je treba zamenjati. Predlagam uporabo ukaza v teh vrsticah:
najdi -tip f -ime | grep -v -e | xargs -i ..Na primer, morda boste želeli datoteke omejiti tako, da bodo nadomestile datoteke PHP, razen git imenikov repozitorija, kot sledi.
najdi -tip f -ime \ *.php | grep -v -e '.git '| xargs -i ..Preberite več o ukazu xargs v bash.
grep
Nato bomo poskušali najti nekaj vzorcev v izbranih datotekah, kot sledi. Upoštevajte, da ker za grep uporabljamo možnost -o, bo na izhodu prikazan le ustrezen niz, če obstaja.
najdi -tip f -ime \ *.php | grep -v -e '.git '|xargs -i grep -e nekaj_vzorca -o
Zgornji ukaz bi moral vrniti seznam nizov, ki se ujemajo z nekaterim vzorcem.
sed
Na koncu želimo zamenjati vse nize, ki se ujemajo z nekaterim vzorcem. Za to moramo pretvoriti grep v sed, kot sledi.
najdi -tip f -ime \ *.php | grep -v -e '.git '|xargs -i sed -i -e s / some_pattern / replacement / g
Ukaz grep postane sed -i in možnost -o je odstranjena. In tam imate.
Zdaj lahko predhodno preverite, katere nize bodo v sed zamenjali, namesto da preizkušate svojo srečo.
Končne opombe o možnostih, uporabljenih v primerih
Tu je seznam možnosti, uporabljenih v na kratko obravnavanih primerih sed.
Možnost | Opis |
-jaz | Uredite na mestu. Če je vhodna datoteka datoteka (ki ni vstavljena v cev), bo rezultat izrazov prepisal vsebino datoteke. Sed sprejme enega npr.) sed -n… |
-e | -e pomeni izraz. Njegov parameter je izraz v jeziku sed. Sed jih sprejme veliko npr.) sed -e 'expr1' -e 'expr2' ..
|
-n | Skriva vrstico, na katero izraz ne vpliva. To je, če je izraz stavek za tiskanje v jeziku sed, potem vrstice, ki niso vključene v stavek za tiskanje, ne bodo vključene v rezultat. npr.) sed -n…
|
Za več informacij o možnostih sed, glejte sed -help
Končne opombe o enakovrednih ukazih se uporabljajo v primerih
Naslednji pripomočki ukazne vrstice so vključeni v primere sed z enakovrednimi ukazi.
- razvrsti
- glavo
- rep
- grep
- mačka
- Tr
- majica
Končna opomba na koncu - na primer enakovredni ukazi
Če se sprašujete, kaj se v primeru dogaja - znak, je ta opomba za vas. Za večino ukazov v primerih sem dodal znak -, da bi namignil, da pričakujemo, da bo vhod sprejet po cevi. To je,
mačka nekaj datotek | razvrsti -R - | glava -1Ko pa je prisoten ukaz na levi strani cevi, lahko namig izpustimo na naslednji način.
mačka nekaj datotek | razvrsti -R | glava -1To se je dogajalo z znakom - po ukazih v primerih.
Končne opombe o funkcijah za nastavitev
V primeru, da iščete, tukaj so funkcije nastavitve za zgornje primere. Izhod, pridobljen z uporabo izjave -f. Za več načinov uporabe preberite več o ukazu declare v bash.
Ukazi
besede ()naslednjih 100
bar ()
odmev ---
old-php ()
echo 'ereg ($ UA, "Bottybot")'
Spodnja črta
Užival sem pri pisanju primerov Baš sed in med potjo celo izbral nekaj dodatnih trikov. Sed je močan pripomoček ukazne vrstice in izrazit jezik za manipulacijo z besedilnimi datotekami. Če ste se radi učili o sedu, ne skrbite, še veliko se ga ni treba dotakniti. Sed naprej.