sed

Bash Sed pavyzdžiai

Bash Sed pavyzdžiai
„Bash“ leidžia atlikti rašto pakeitimą naudojant kintamą išplėtimą, pvz., ($ Var / pattern / substitue). Taigi, ar sedas patinka šitaip (sed -e 's / pattern / pakeitimas /'). Tačiau slypi daugiau nei pakeisti šablonus tekstiniuose failuose.  Čia mes iš naujo atrasime „sed“, naudodamiesi lygiavertėmis komandomis ir darbo eigomis, padedančiomis atlikti kasdienes užduotis.

„Sed“ pavyzdžių sąranka

Čia yra trumpas pavyzdys, kurį bandysiu nepadaryti per daug.

„Žodžiai“ yra tekstinis failas, kuriame yra skaičiai nuo 1 iki 100. Jei nesate tikri dėl jos sukūrimo komandos, žr. „Xargs“ eksportavimo funkciją „Bash Export“ komandoje. Niekada negali žinoti, kad tai gali būti kitame „shell scripting“ interviu.

„Juosta“ yra tekstinis failas, kuriame yra viena eilutė -.

„Old-php“ yra tekstinis failas, kuriame yra senojo PHP eilutės, kurios bus pertrauktos į php7 ar naujesnę versiją. (Užuomina: eregas)

Atminkite, kad visas aukščiau aprašytas funkcijas galite rasti žemiau skyriuje „Pabaiga apie sąrankos funkcijas“.

Sed pavyzdžiai su lygiavertėmis komandomis

Komandinės eilutės aplinkoje rasite daugiau nei vieną nurodytos užduoties sprendimą. Tačiau dažniausiai norisi eiti tuo keliu, kuris sukelia mažiausiai pasipriešinimo. Čia pateikiamas „sed“ komandų su atitinkamomis ekvivalentiškomis komandomis pavyzdžių sąrašas, kai kurie iš jų bus išsamiai aprašyti toliau.

1. Atspausdinkite atsitiktinę eilutę (atitinka rūšiavimą -R - | galva -1)

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

2.Spausdinti paskutinę failo eilutę (atitinka galvą -1 -)

sed -n '$ p' -

3. Spausdinkite pirmąsias 10 failo eilučių (atitinka head -n 10 -)

sed '10q' -

4. Išspausdinkite pirmąją failo eilutę (atitinka uodegą -1 -)

sed -n '1p' -

5. Ištrinkite visus simbolio egzempliorius (atitinka tr -delete '0' - kur 0 yra simbolis, kurį norime ištrinti)

sed -e 's / 0 // g' -

6. Konvertuoti csv failą į tsv (atitinka tr ', "\ t' -)

sed -e 's /, / \ t / g' -

7.Pridėti failo eilutę (atitinka kačių juostą -)

sed '$ a ---' -

8. Pridėkite eilutę prie bylos (atitinka katės juostą)

sed '1i ---' -

9. Išspausdinkite visas failo eilutes (atitinka katę)

sed -n -e 'p' -

10. Spausdinkite linijas, atitinkančias modelį (atitinka grep -e '^ 1' -)

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

11. Ištrinti eiles atitinkančias eilutes (atitinka grep -v -e '^ 1' -)

sed -e '/ ^ 1 / d' -

12. Gaukite failo eilučių skaičių (atitinka wc -l -)

sed -n -e '$ =' -

13. Rašymas į failą fone (lygiavertis komandos tee)

sed "w $ 1" -

Pavyzdys, kaip „sed“ naudoti komandai „tee“ įgyvendinti

Tiesiai aukščiau yra pavyzdys, pažymėtas Rašyti į failą fone. Rūšis skamba kaip tee komanda. Na, taip yra. Čia mes išplėsime tai, kaip įgyvendinti funkciją, pakeičiančią tee in bash, naudojant sed.

Komandos

tee ()

testas $ # -eq 1 || grįžti;
sed „w $ 1“ -

pagrindinis ()

10 sek tee dešimt;
katinas dešimt

pagrindinis

Rezultatas

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

Čia pamatysite du sveikųjų skaičių nuo 1 iki 10 sąrašus. Pirmasis yra iš komandos seq. Antrą gauname iš failo katės, parašytos tee. Aš žinau, kad tai yra juokinga, bet tai veikia!

Pavyzdys, naudojant „sed“, norint atsispausdinti atsitiktinę failo eilutę

Tarkime, kad mes norime atsispausdinti atsitiktinę failo eilutę naudodami bash ir šiek tiek sed. Ar galime tai padaryti? Taip, mes galime! Štai kaip.

Įgyvendinkite funkciją, kuri

  1. Gauna failo eilučių skaičių L
  2. Generuoja atsitiktinį skaičių tarp 1 ir L, R
  3. Spausdina R

Funkcija tikisi, kad įvestis bus perduota iš išorės.

Komandos

kai kurios eilutės ()

funkcija lc ()

sed -n -e '$ =' -
;
funkcijos spausdinimo eilutė ()

sed -n -e "$ 1 p" -
;
temp = $ (mktemp);
katė -> $ temp;
katė $ temp | spausdinimo eilutė $ ((RANDOM% $ (katė $ temp | lc) + 1));
rm $ temp

Naudojimo pavyzdys (1)

100 sek _

Išvestis (1)

35

Naudojimo pavyzdys (2)

susisukti https: // linuxhint.com / bash_cut_command / --silent | juostelės | kai kurios eilutės

Žr. Toliau pateiktą pavyzdį, naudodamas „Sed“ HTML žymėms nuimti. Atkreipkite dėmesį, kad virš pateiktas pavyzdys tuščiose eilutėse kartais pateikiamas tuščias. Kaip pratimą, jį galima patobulinti.

Eilutės faile spausdinimas naudojant sed

Tarkime, kad norite įdiegti funkciją „bash“, kad išspausdintumėte nurodytą failo eilutę. Bandymas išspausdinti vieną failo eilutę naudojant kilpą bash, galva, uodega ar awk yra per didelis darbas, norint išspausdinti eilutes faile. Gerai, kad turime sed. Gautoji funkcija naudojant sed būtų tokia.

Komandos

spausdinimo linija ()

sed -n "$ 1 p" -

Dabar pažiūrėkime, kas atsitiks, kai žodžiuose naudojame spausdinimo eilutę.

Komandos

žodžiai | spausdinimo linija 50

Rezultatas

50

Gerai. Atrodo gerai, bet pabandykime tai, kas atrodo šiek tiek mažiau trivialu.

Komandos

deklaruoti -xf žodžius
paskelbti -xf spausdinimo linija
seka 1 10 $ (žodžiai | wc -l) | xargs -i bash -c "žodžiai | spausdinimo eilutė "

Rezultatas

1
11
21
31
41
51
61
71
81
91

Gerai. Dabar tai panašiau! Jūs matote, kaip „sed“ gali būti naudojamas „bash“ scenarijuje, norint atsispausdinti bet kurią failo eilutę.

Nurodyti pavyzdžius be lygiaverčių komandų

Komandinės eilutės aplinkoje kartais kelias į mažiausiai pasipriešinimą sukeliantį sprendimą yra „sed“ būdas; priešingu atveju galų gale atliksite daugiau darbo, nei reikalaujama. Kai kurios komandos gali būti pateikiamos žemiau.

Komanduokite visas eilutes apvalkalo scenarijuje

sed -e 's / ^ / # /' -
Ištrinti pirmąją eilutę
sed -e '1d' -
Ištrinti paskutinę eilutę
sed -e '$ d' -
Įterpkite eilutę prieš eilutes, atitinkančias modelį
sed '/ 0 $ / i ---' -
Įterpkite eilutę po eilučių, atitinkančių modelį
sed '/ 0 $ / ---' -
Ištrinkite HTML žymas
sed -e's /<[^>] *.// g ' -
Atnaujinkite seną senojo php kodo „ereg“, kad jis veiktų PHP7 ar naujesnėje versijoje
sed 's / ereg (\ ([^,] * \).\ ([^)] * \)./ strpos (\ 2, \ 1) / g '
Patikrinkite, ar sed yra ankstesnė nei tam tikra versija
sed -e 'v 4.5 ' -

Sed versijos, išsišakojusios bash, pavyzdys

Aukščiau pateiktuose pavyzdžiuose yra eilutė, skirta patikrinti, ar „sed“ yra ankstesnė už tam tikrą versiją, kurią galime naudoti versijos šakojimui įdiegti „bash“, kuris, manau, yra lengvesnis nei bandymas įgyvendinti funkciją, kad būtų galima palyginti versijų numerius iš „sed-version“ išvesties. Vienintelis spąstas yra tas, kad jei yra ankstesnė „sed“ versija, kuri nepalaiko „v“ komandos, tada turime problemų.

Komandos

test-sed-version-at-most ()
aidas -n | sed "v $ 1" - 2> / dev / null

bandomoji versija ()

echo -n "versija $ 1. Gerai. Atlikite tai ";
„test-sed-version-at-most“ $ 1 &&
aidas -n „senas“;
tiesa
||
aidas -n "naujas"
;
aidas "būdas."

pagrindinis ()

vietinis v;
už v 4.4,5;
padaryti
bandyti versiją $ v;
padaryta

pagrindinis

Rezultatas

4 versija.4. Gerai. Daryk senai.
4 versija.5. Gerai. Atlikite tai nauju būdu.

Atkreipkite dėmesį, kad mano mašinoje veikia sed versija, kai rašote šiuos simbolius.4, kuris paaiškintų aukščiau pateiktą išvestį. Be to, tuo pačiu metu naujausia „gnu sed“ versija buvo 4.7, maždaug 3 metais vyresnė už tą, kurią turiu aš. Mano sedas senas! Tiesą sakant, sed 4.0.6, prie versijos komandos buvo pridėtas parametras, todėl ši strategija tinka bet kuriam minėtam bent v4.0.6, kuris yra švelnus, atsižvelgiant į tai, kad versija buvo išleista 2003 m. Pradžioje. Tu esi geras.

Aš šiek tiek papildomai kasiau, iš tikrųjų NAUJIENOS perskaičiau naujausią šaltinio kodą. 4 versija.6 turi naują funkciją -dugug, kuri ištrina scenarijų ir komentuoja išvesties linijas. Tai leistų išversti „Sed“ scenarijus, sukurtus funkcijų „bash“, į kanoninę. Saunus! Tik nepamirškite, kad jums reikia „sed“ versijos šakų. Būtent čia ir atsiranda šis pavyzdys.

Funkcijos „bash“ pavyzdys, naudojant „sed“ HTML žymėms nuimti

Aukščiau pateiktuose pavyzdžiuose yra eilutė, skirta HTML juostoms ištrinti. Įmeskime tai į „bash“ funkciją ir naudokime ją, kad pašalintume visas HTML žymes iš paskutinio mano parašyto straipsnio.

Komandos

juostelės ()

sed -e's /<[^>] *.// g ' -

susisukti https: // linuxhint.com / bash_cut_command / --silent | juostelės

Negaliu sakyti, kad jis tobulas, bet bent jau skaitomas terminale.

„Sed“ pavyzdžiai su darbo eiga: „Workflow“ pavyzdžiai: saugiai pakeiskite visus naudodami „find“, „grep“ ir „sed“

Galima sakyti, kad pakeitimai, atlikti naudojant sed su opcija -i, yra negrįžtami. Tai yra, tikėtina, kad baigsite vienu simboliu mažiau, nei numatyta, tikėtina, kad tekstas bus pakeistas. Štai kodėl šiame pavyzdyje „sed“ naudosime darbo eigoje, kad saugiai pakeistume tekstą visuose pasirinktuose failuose.

Darbo eiga

  1. rasti
  2. grep
  3. sed
rasti

Čia jūs pasirinksite failus, kurie bus pakeisti. Siūlau naudoti komandą pagal šias eilutes:

rasti -type f -name | grep -v -e | xargs -i ..

Pvz., Galite apriboti failus pakeisti PHP failus, išskyrus „git“ saugyklos katalogus, taip.

rasti -type f -name \ *.php | grep -v -e '.git '| xargs -i ..

Skaitykite daugiau apie xargs komandą bash.

grep

Tada mes bandysime suderinti some_pattern failuose, pasirinktuose taip. Atkreipkite dėmesį, kad kadangi „grep“ naudojame -o parinktį, išvestyje bus rodoma suderinta eilutė, jei tokia yra.

rasti -type f -name \ *.php | grep -v -e '.git '|
xargs -i grep -e some_pattern -o

Aukščiau pateikta komanda turėtų pateikti eilutės, atitinkančios some_pattern, sąrašą.

sed

Galiausiai norime pakeisti visas eilutes, atitinkančias some_pattern. Norėdami tai padaryti, turime konvertuoti „grep“ į „sed“ taip.

rasti -type f -name \ *.php | grep -v -e '.git '|
xargs -i sed -i -e s / some_pattern / pakeitimas / g

Grep komanda tampa sed -i, o -o parinktis pašalinama. Ir jūs turite tai.

Dabar galite iš anksto patikrinti, kokios stygos bus pakeistos sed, o ne išbandyti savo sėkmę.

Galutinės pastabos apie pavyzdžiuose naudojamas galimybes

Čia pateikiamas trumpai aptartų pavyzdžių sąrašas.

Variantas apibūdinimas
-i Redaguoti vietoje. Jei įvestis yra failas (ne įvedamas), išraiškų rezultatas perrašys failo turinį.

Sedas priima vieną

pvz., sed -n…

-e -e reiškia išraišką. Jo parametras yra sed kalbos išraiška.

Sedas priima daugelį

pvz., sed -e „expr1“ -e „expr2“…

-n Paslepia liniją, kurios išraiška neveikia. Tai yra, jei išraiška yra spausdinimo sakinys sed kalba, tada eilutės, neįtrauktos į spausdinimo ataskaitą, nebus įtrauktos į išvestį.

pvz., sed -n…

Norėdami sužinoti daugiau apie galimas sed parinktis, žr. Sed -help

Pabaigos pastabos apie lygiavertes komandas naudojamos pavyzdžiuose

Šie pavyzdiniai komandinės eilutės įrankiai yra įtraukti į „sed“ pavyzdžius su lygiavertėmis komandomis.

Pabaiga ant galo - pavyzdžiui, lygiavertės komandos

Jei jums įdomu, kas vyksta pavyzdyje esančiu simboliu, ši pastaba skirta jums. Aš pridėjau simbolį po daugelio pavyzdžių komandų, norėdamas užsiminti, kad mes tikimės, kad įvestis bus gaunama vamzdžiu. Tai yra,

katinas kai kurie failai | rūšiuoti -R - | galva -1

Tačiau kai komanda kairėje rankoje yra, mes galime praleisti užuominą taip.

katinas kai kurie failai | rūšiuoti -R | galva -1

Tai, kas vyko pavyzdžiuose po komandomis - simbolis po.

Pabaigos apie sąrankos funkcijas

Jei ieškote, pateikiamos aukščiau pateiktų pavyzdžių sąrankos funkcijos. Rezultatas, gautas naudojant deklaruoti -f. Norėdami sužinoti daugiau, skaitykite komandą deklaruoti bash.

Komandos

žodžiai ()

100 sek

juosta ()

aidas ---

senas php ()

echo 'ereg (USD UA, „Bottybot")'

Apatinė eilutė

Man patiko rašyti „Bash sed“ pavyzdžius ir net pasiėmiau keletą papildomų triukų. „Sed“ yra galingas komandinės eilutės įrankis ir išraiškinga kalba, skirta manipuliuoti teksto failais. Jei jums patiko sužinoti apie sed, nesijaudinkite, dar reikia paliesti dar daug ką. Sedėti.

„Battle for Wesnoth“ pamoka
„Battle for Wesnoth“ yra vienas populiariausių atvirojo kodo strateginių žaidimų, kurį šiuo metu galite žaisti. Šis žaidimas ne tik buvo kuriamas laba...
0 A.D. Pamoka
Iš daugybės strateginių žaidimų 0 A.D. sugeba išsiskirti kaip išsamus pavadinimas ir labai gilus, taktinis žaidimas, nepaisant to, kad yra atviro kodo...
„Unity3D“ pamoka
Įvadas į „Unity 3D“ „Unity 3D“ yra galingas žaidimų kūrimo variklis. Tai yra daugiašalė platforma, kuri leidžia kurti žaidimus mobiliesiems, interneti...