sed

Primeri Bash Sed

Primeri Bash Sed
Bash vam omogoča, da izvedete zamenjavo vzorca z uporabo spremenljive razširitve, na primer ($ var / pattern / replacement). In tako, ali sed tak (sed -e 's / pattern / replacement /'). Vendar je treba več kot sedanje nadomestiti vzorce v besedilnih datotekah.  Tu bomo na primer znova odkrili Sed z enakovrednimi ukazi in delovnimi tokovi za pomoč pri vsakodnevnih opravilih.

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

1
2
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

  1. Pridobi število vrstic v datoteki, L
  2. Ustvari naključno število med 1 in L, R
  3. 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)

35

Primer uporabe (2)

curl https: // linuxhint.com / bash_cut_command / --silent | trak-oznake | nekaj vrstic

Oglejte 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 50

Izhod

50

v redu. Videti je dobro, a poskusimo nekaj, kar je videti nekoliko manj malenkostno.

Ukazi

izjavi -xf besede
izjavi -xf print-line
seq 1 10 $ (besede | wc -l) | xargs -i bash -c "besede | črta za tiskanje "

Izhod

1
11
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

  1. najti
  2. grep
  3. 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.

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 -1

Ko pa je prisoten ukaz na levi strani cevi, lahko namig izpustimo na naslednji način.

mačka nekaj datotek | razvrsti -R | glava -1

To 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.

Kako zajeti in pretakati svojo igralno sejo v Linuxu
V preteklosti je bilo igranje iger le hobi, sčasoma pa je igralniška industrija zabeležila veliko rast glede tehnologije in števila igralcev. Občinstv...
Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...
Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...