„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
12
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
- Gauna failo eilučių skaičių L
- Generuoja atsitiktinį skaičių tarp 1 ir L, R
- 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)
35Naudojimo 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 50Rezultatas
50Gerai. Atrodo gerai, bet pabandykime tai, kas atrodo šiek tiek mažiau trivialu.
Komandos
deklaruoti -xf žodžiuspaskelbti -xf spausdinimo linija
seka 1 10 $ (žodžiai | wc -l) | xargs -i bash -c "žodžiai | spausdinimo eilutė "
Rezultatas
111
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
- rasti
- grep
- 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.
- rūšiuoti
- galva
- uodega
- grep
- katė
- Tr
- tee
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 -1Tačiau kai komanda kairėje rankoje yra, mes galime praleisti užuominą taip.
katinas kai kurie failai | rūšiuoti -R | galva -1Tai, 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.