„Bash Sed“ pavyzdžiai

Bash Sed Examples



„Bash“ leidžia pakeisti modelį naudojant kintamą išplėtimą, pvz., ($ {Var/pattern/pakeitimas}). Taigi, ar sedas panašus į šį (sed -e ‘s/modelis/pakeitimas/’). Tačiau reikia nuveikti daugiau nei pakeisti teksto failų modelius. Čia iš naujo atrasime sed, naudodami pavyzdį, naudodami lygiavertes komandas ir darbo eigas, padedančias atlikti kasdienes užduotis.

Sąranka pagal pavyzdžius

Čia yra trumpas pavyzdžio paruošimo vadovas, kurio aš stengsiuosi nepersistengti.







žodžiusyra tekstinis failas, kuriame yra skaičiai nuo 1 iki 100. Jei nesate tikri dėl jo sukūrimo komandos, žr. „Bash Export Command“ xargs eksporto funkcija. Niekada nežinai, kad tai gali būti kitame „shell“ scenarijaus interviu.



barasyra tekstinis failas, kuriame yra viena eilutė -.



senas-phpyra tekstinis failas, kuriame yra senų PHP eilučių, kurios bus sugadintos naudojant „PHP7“ ar naujesnę versiją. (Patarimas: ereg)





Atminkite, kad visas aukščiau aprašytas funkcijas rasite žemiau, „Endnote“ apie sąrankos funkcijas.

Sed pavyzdžiai su lygiavertėmis komandomis

Komandinės eilutės aplinkoje rasite daugiau nei vieną tam tikros užduoties sprendimą. Tačiau dažniausiai norite eiti tuo keliu, kuris sukelia mažiausią pasipriešinimą. Čia yra „sed“ komandų pavyzdžių sąrašas su atitinkamomis lygiavertėmis komandomis, kai kurios iš jų bus išsamiai aprašytos toliau.



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

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

2. Išspausdinkite paskutinę failo eilutę (atitinka galvą -1 -)

sed -n „$ p“-

3. Išspausdinkite pirmąsias 10 failo eilučių (atitinka galvą -n 10 -)

sed „10q“-

4. Atspausdinkite pirmąją failo eilutę (atitinka uodegą -1 -)

sed -n „1p“-

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

sed -Ir 's / 0 // g'-

6. Konvertuokite csv failą į tsv (atitinka tr ',' ' t' -)

sed -Ir „s/,/ t/g“-

7. Pridėti eilutę prie failo (atitinka katės juostą -)

sed „$ a ---“-

8. Pridėti eilutę prie failo (atitinka katės juostą)

sed '1i ---'-

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

sed -n -Ir „p“-

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

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

11. Ištrinkite modelį atitinkančias eilutes (atitinka grep -v -e '^1' -)

sed -Ir '/^1/ d'-

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

sed -n -Ir „$ =“-

13. Rašykite į failą fone (lygiavertė komanda tee)

sed 'į vidų{1} USD'-

Pavyzdys naudojant sed komandai tee įgyvendinti

Tiesiai aukščiau yra pavyzdys, pažymėtas Rašyti į failą fone. Panašiai kaip „tee“ komanda. Na, tai yra. Čia mes išsamiau aptarsime, kaip įgyvendinti funkciją pakeisti tee bash naudojant sed.

Komandos

tee ()
{
testas $ {#} -ekv 1 || grįžti;
sed 'į vidų{1} USD'-
}
pagrindinis()
teetai;
katėtai

pagrindinis

Išvestis

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ų sąrašus nuo 1 iki 10. Pirmasis yra iš komandos seq. Antrasis mes gauname iš failo katės, parašytos tee. Aš žinau, kad tai juokinga, bet tai veikia!

Pavyzdys naudojant sed, norint atspausdinti atsitiktinę failo eilutę

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

Įdiekite funkciją, kuri

  1. Gauna failo eilučių skaičių, L
  2. Sukuria atsitiktinį skaičių nuo 1 iki L, R
  3. Spausdina R.

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

Komandos

kažkokia eilutė()
{
funkcijalc()
{
sed -n -Ir „$ =“-
};
funkcijaspausdinimo linija()
{
sed -n -Ir '{1} USDp '-
};
temp= $( mktemp );
katė-> $ {temp};
katė $ {temp} |spausdinimo eilutė $((RANDOM%$( katė $ {temp} |lc)+1 ));
rm $ {temp}
}

Naudojimo pavyzdys (1)

sek 100 |_

Išėjimas (1)

35

Naudojimo pavyzdys (2)

garbanoti https://linuxhint.com/bash_cut_command/ -tyli |juostelės|kažkokia eilutė

Žiūrėkite žemiau pateiktą pavyzdį, naudodami „sed“, kad pašalintumėte HTML žymas. Atminkite, kad per didelis pavyzdys kartais tuščias eilutes grąžina tuščias. Kaip pratimą, jį galima patobulinti.

Sedo naudojimas failo eilutėms spausdinti

Tarkime, kad norite įdiegti funkciją „bash“, kad išspausdintumėte tam tikrą failo eilutę. Bandymas atspausdinti vieną failo eilutę naudojant kilpą bash, head, tail arba awk yra per daug darbo, norint išspausdinti failo eilutes. Gerai, kad turime. Gauta funkcija naudojant sed būtų tokia.

Komandos

spausdinimo linija()
{
sed -n '{1} USDp '-
}

Dabar pažiūrėkime, kas atsitinka, kai žodžiams naudojame spausdinimo liniją.

Komandos

žodžius|spausdinimo linijapenkiasdešimt

Išvestis

penkiasdešimt

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

Komandos

skelbti -xfžodžius
skelbti -xfspausdinimo linija
sek 1 10$(žodžius| wc -jie ) | xargs-imušti -c „žodžiai | print-line {} '

Išvestis

1
vienuolika
dvidešimt vienas
31
41
51
61
71
81
91

Gerai. Dabar tai labiau panašu! Matote, kaip sed gali būti naudojamas „bash“ scenarijuje, norint išspausdinti bet kurią failo eilutę.

Sed pavyzdžiai be lygiaverčių komandų

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

Komanduokite visas apvalkalo scenarijaus eilutes

sed -Ir 's/^/#/'-
Ištrinti pirmąją eilutę
sed -Ir „1d“-
Ištrintipaskutinislinija
sed -Ir „$ d“-
Įterpkite eilutę prieš eilutes, atitinkančias modelį
sed '/0 $/i ---'-
Įterpkite eilutę po modelį atitinkančių eilučių
sed ' / 0 $ / ---'-
Pašalinkite html žymes
sed -Ir 's /†*.// g'-
Atnaujinkite eregįpaleisti seną php kodąįphp7 ar naujesnę versiją
sed 's/ereg ( ([^,]*). ([^)]*) ./ strpos ( 2, 1)/g'
Patikrintijei sedyra ankstesnė nei tam tikra versija
sed -Ir „4.5“-

Sed versijos, besišakojančios bash, pavyzdys

Aukščiau esančiuose pavyzdžiuose yra eilutė, skirta patikrinti, ar sed yra ankstesnė už tam tikrą versiją, kurią galime naudoti versijos šakojimui bash, o tai, mano manymu, yra lengviau nei bandymas įdiegti funkciją, leidžiančią palyginti versiją su sed - versijos išvestimi . Vienintelė problema yra ta, kad jei yra ankstesnė sed versija, kuri nepalaiko v komandos, tada mes turime problemų.

Komandos

test-sed-version-at-maximum() {
išmetė -n | sed 'v{1} USD'-2> /dev/nulis
}
bandomoji versija()
{
išmetė -n 'Versija{1} USD. Gerai. Padaryk tai ';
test-sed-version-at-maximum{1} USD && {
išmetė -n 'senas';
tiesa
} || {
išmetė -n 'naujas'
};
išmetė 'būdas'.
}
pagrindinis()
{
vietinisv;
dėlvį 4.{4,5};
daryti
bandomoji versija$ {v};
padaryta
}
pagrindinis

Išvestis

Versija4.4. Gerai. Daryk tai senu būdu.
Versija4.5. Gerai. Daryk tai nauju būdu.

Atminkite, kad mano kompiuteryje veikianti sed versija, kai įvedėte šiuos simbolius, yra 4.4, o tai paaiškintų aukščiau pateiktą išvestį. Be to, tuo pačiu metu naujausia „gnu sed“ versija buvo 4,7, maždaug 3 metais senesnė nei mano. 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 jau v4.0.6, kuris yra švelnus, atsižvelgiant į tai, kad ši versija buvo išleista 2003 m. Pradžioje.

Aš dar šiek tiek kasiau, iš tikrųjų NAUJIENOS perskaičiau naujausią šaltinio kodą. 4.6 versijoje yra nauja funkcija - derinimas, kuris pašalina scenarijų ir pažymi išvesties eilutes. Tai leistų jums išversti „sed“ scenarijus, sukurtus funkcijų „bash“, į kanoninę formą. Saunus! Tik nepamirškite, kad jums reikia sed versijos, besišakojančios bash. Būtent čia atsiranda šis sed pavyzdys.

„Bash“ funkcijos pavyzdys naudojant „sed“, kad būtų pašalintos HTML žymos

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

Komandos

juostelės()
{
sed -Ir 's /†*.// g'-
}
garbanoti https://linuxhint.com/bash_cut_command/ -tyli |juostelės

Negaliu pasakyti, kad jis tobulas, bet bent jau jį galima skaityti terminale.

Sed pavyzdžiai su darbo eiga: Darbo eigos pavyzdys: saugiai pakeiskite visus naudodami find, grep ir sed

Galima drąsiai teigti, kad pakeitimai, atlikti naudojant sed su parinktimi -i, yra negrįžtami. Tai yra, nebent esate visiškai tikri, kokį tekstą reikia pakeisti, greičiausiai gausite vienu simboliu mažiau, nei numatyta. Štai kodėl šiame pavyzdyje mes naudosime „sed“ darbo eigoje, kad galėtume saugiai pakeisti visų pasirinktų failų tekstą.

Darbo eiga

  1. rasti
  2. sukibimas
  3. sed
rasti

Čia pasirinkite failus, kuriuos reikia pakeisti. Siūlau naudoti komandą pagal šias eilutes:

rasti -tipasf-vardas | sukibimas -v-Ir| xargs-aš ...

Pvz., Galbūt norėsite apriboti failus, kad pakeistumėte PHP failus, išskyrus „git“ saugyklos katalogus, kaip nurodyta toliau.

rasti -tipasf-vardas*.php| sukibimas -v -Ir '.go' | xargs -i...

Skaitykite daugiau apie komandą xargs bash.

sukibimas

Toliau mes stengsimės suderinti „some_pattern“ pasirinktuose failuose. Atminkite, kad kadangi „grep“ naudojame -o parinktį, išvestyje bus rodoma tik suderinta eilutė, jei tokia yra.

rasti -tipasf-vardas*.php| sukibimas -v -Ir '.go' |
xargs -i sukibimas -Irsome_pattern-arba

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 grep konvertuoti į sed taip.

rasti -tipasf-vardas*.php| sukibimas -v -Ir '.go' |
xargs -i sed -i -Irs/some_pattern/pakeitimas/g

Grep komanda tampa sed -i, o parinktis -o pašalinama. Ir štai tu jį turi.

Dabar galite patikrinti, kokios stygos bus pakeistos sed, prieš tai išbandę savo sėkmę.

Galutinės pastabos apie pavyzdžiuose naudojamas parinktis

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

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

Sedas priima vieną

pvz) sed -n…

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

Sedas priima daug

pvz) sed -e'expr1 '-e'expr2'

-n Slėpia išraiškos nepaveiktą liniją. Tai yra, jei išraiška yra spausdinta frazė sed kalba, tada eilutės, neįtrauktos į spausdinimo teiginį, nebus įtrauktos į išvestį.

pvz) sed -n…

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

Pabaigos pastabos apie lygiavertes komandas, naudojamas pavyzdžiuose

Šios komandų eilutės priemonės yra įtrauktos į sed pavyzdžius su lygiavertėmis komandomis.

  • rūšiuoti
  • galva
  • uodega
  • sukibimas
  • katė
  • NS
  • tee

Pabaigos pastaba - pavyzdyje lygiavertės komandos

Jei jums įdomu, kas vyksta pavyzdyje - šis užrašas skirtas jums. Po daugelio pavyzdžių komandų pridėjau simbolį - tai reiškia, kad tikimės, kad įvestis bus gauta per vamzdį. Tai yra,

katėkažkoks failas| rūšiuoti -R-| galva -1

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

katėkažkoks failas| rūšiuoti -R | galva -1

Taip ir buvo su pavyzdžių simboliais po komandų.

Sąrankos funkcijų pabaigos pastabos

Jei ieškote, čia yra aukščiau pateiktų pavyzdžių sąrankos funkcijos. Išvestis, gauta naudojant deklaruoti -f. Skaitykite daugiau apie komandą deklaruoti bash, kad gautumėte daugiau naudojimo būdų.

Komandos

žodžius()
{
sek 100
}
baras()
{
išmetė ---
}
senas-php()
{
išmetė „ereg“ ($ UA, „Bottybot“)
}

Esmė

Man patiko rašyti „Bash sed“ pavyzdžius ir net pakeliui pasiėmiau keletą papildomų gudrybių. Sed yra galinga komandų eilutės priemonė ir išraiškinga kalba, skirta manipuliuoti teksto failais. Jei jums patiko mokytis apie sed, nesijaudinkite, kad dar reikia daug ką paliesti. Sėdėk toliau.