logo

„Sed“ komanda „Linux“ / „Unix“ su pavyzdžiais

„Linux“ komanda „sed“ reiškia srauto rengyklę. Jis naudojamas srautams (failams) redaguoti naudojant reguliariąsias išraiškas. Tačiau šis redagavimas nėra nuolatinis. Jis lieka tik ekrane, tačiau iš tikrųjų failo turinys išlieka toks pat.

Pirmiausia jis naudojamas teksto pakeitimui; Be to, jis gali būti naudojamas kitoms teksto manipuliavimo operacijoms, tokioms kaip įterpimas, trynimas, paieška ir kt. Komanda sed leidžia redaguoti failus jų neatidarant. Reguliaraus posakio palaikymas daro jį galingesniu teksto manipuliavimo įrankiu.

sed komandos apžvalga

Tai „Unix“ programa, kuri transformuoja ir analizuoja tekstą kompaktiška ir paprasta programavimo kalba. Ją 1973–1974 m. integravo Lee E. McMahon iš Bell Labs ir šiandien yra beveik visose operacinėse sistemose. Komanda sed buvo pagrįsta ankstesnio qed (greito redaktoriaus) ir ed interaktyvaus rengyklės scenarijų aspektais. Tai buvo ankstyviausias įrankis, palaikantis reguliariąsias išraiškas, ir išlieka aktyvus apdorojant tekstą, svarbiausia su pakeitimo komanda. Įžymūs alternatyvūs įrankiai yra Perl ir AWK for 'srauto redagavimas' ir paprasto teksto eilutės manipuliavimas.

sed komandos veikimo režimas

Komanda sed yra į eilutę orientuota teksto apdorojimo priemonė: ji eilutė po eilutės skaito tekstą iš failo arba įvesties srauto į vidinį buferį, vadinamą šablono erdve. Visos eilutės nuskaitomos pradeda ciklą. Komandoje sed naudojama viena ar kelios operacijos, kurios buvo aprašytos sed scenarijumi šablono erdvėje. Jis valdo programavimo kalbą, naudodamas apie 25 komandas, apibūdinančias operacijas su tekstu.

Visoms įvesties eilutėms komanda sed paprastai sukuria šablono erdvę ir, įvykdžius scenarijų, vėl pradeda ciklą kita eilute. Kiti scenarijaus pabaigos pobūdžiai pasiekiami naudojant scenarijaus komandas ir nustatymo parinktis, pvz., N, jei norite iš karto įtraukti kitą eilutę į šablono erdvę, q - išeiti, d, kad pašalintumėte šablono erdvę ir pan. Taigi sed scenarijus yra susijęs su ciklo korpusu, kuris kartojasi iš srautinės linijos, kurioje ciklo kintamąjį ir pačią kilpą palaiko ir numano sed.

  • Sed scenarijus gali būti aprašytas komandinėje eilutėje arba perskaitytas atskirame faile. Sed scenarijuje komandos gali gauti papildomą adresą reguliarių reiškinių ar eilučių numerių kontekste. Adresas nusprendžia, kada komanda bus vykdoma. Pavyzdžiui, 2d vykdys tik komandą d (arba trynimą) 2-oje įvesties eilutėje, o /^ /d pašalins kiekvieną eilutę, prasidedančią tarpu.
  • Laikymo erdvė, izoliuotas specialus buferis, gali būti naudojamas kai kurioms sed komandoms kaupiančiam tekstui tarp ciklų laikyti. sed komandų kalba turi tik du kintamuosius (šablono erdvė ir laikymo vieta) ir į GOTO panašią šakojimosi funkciją. Tačiau kalba yra baigta Tiuringo kalba. Ezoteriniai sed scenarijai galimi keliems žaidimams, tokiems kaip tetris, šachmatai, arkanoidas ir sokobanas.
  • Pagrindinė kilpa veikia visose įvesties srauto eilutėse, tikrinant sed scenarijų visose įvesties eilutėse. Visos sed scenarijaus eilutės yra šablono ir veiksmo pora, nurodanti, kokį šabloną reikia suderinti ir kurį veiksmą įgyvendinti, kurį galima nukopijuoti kaip sąlyginį teiginį. Numatytieji veiksmai (spausdinimo šablono erdvė, eilutės kopijavimas į šablono erdvę), įvesties ir išvesties srautai bei darbiniai kintamieji (laikymo erdvė ir šablono erdvė) yra numanomi; dėl pagrindinės kilpos galima nurodyti trumpas vienos eilutės programas.

Komandos sed naudojimas

    Pakeitimo komanda
    Toliau pateiktame pavyzdyje pavaizduota labiausiai paplitusi komanda ir įprastas sed komandos naudojimas, ty pakeitimas. Naudojimas buvo tikroji sed komandos motyvacija:
    sed 's/regexp/replacement/g' inputFileName > outputFileNameKitos sed komandos
    Taip pat galimi ir kiti paprasto apdorojimo būdai naudojant 25 sed komandas. Pavyzdžiui, toliau naudojama parinktis d, kad būtų galima filtruoti eilutes, kuriose yra tik tarpai ir eilutės simbolio pabaiga:
    sed '/^ *$/d' inputFileName
    Aukščiau pateiktame pavyzdyje naudojami keli toliau pateikiami reguliariosios išraiškos metasimboliai:
    • Taškas (^) yra toks pat kaip eilutės pradžia.
    • Dolerio simbolis ($) yra toks pat kaip eilutės pabaiga.
    • Žvaigždutė (*) yra tokia pati kaip daugiau arba nulis ankstesnio simbolio.
    • Pliuso simbolis (+) yra toks pat kaip vienas ar keli ankstesni simboliai.
    • Klaustukas (?) yra toks pat, kaip ir daugiau arba nulis ankstesnio simbolio.
    • Taško simbolis (.) yra lygiai toks pat kaip vienas simbolis.
    naudojamas kaip filtras
    Dažnai komanda sed naudojama kaip filtras dujotiekio viduje pagal Unix:
    $generateData | sed 's/x/y/g'
    GeneratorData programa generuoja duomenis, o komanda sed atlieka nedidelį pakeitimą vietoj y pakeisdama x.Failų pagrindu sukurti sed scenarijai
    Dažnai naudinga scenarijaus faile įdėti daug sed komandų, po vieną komandą kiekvienoje eilutėje ir naudoti -f vėliavėlę komandoms iš failo vykdyti:
    sed -f subst.sed inputFileName > outputFileName

Sintaksė:

 sed [OPTION]... {script-only-if-no-other-script} [input-file]... 

Galimybės:

Toliau pateikiamos kelios komandos sed komandų eilutės parinktys:

-n, --tylus, --tylus: Tai stipriai leidžia mums atspausdinti rašto erdvę.

-e scenarijus, --expression=script: Jis naudojamas scenarijui pridėti prie vykdomų komandų.

-f scenarijaus failas, --file=skripto failas: Jis naudojamas scenarijaus failo turiniui pridėti prie vykdomų komandų.

--sekite simbolius: jis naudojamas sekti simbolius, kai apdorojamas vietoje.

-i[SUFFIX], --vietoje[=SUFFIX]: jis naudojamas failams redaguoti vietoje (sukuria atsarginę kopiją, jei pateikiama parinktis SUFFIX).

-l N, --linijos ilgis = N: Jis naudojamas norint nurodyti norimą eilutės vyniojimo ilgį komandai „l“.

--posix: jis naudojamas visiems GNU plėtiniams išjungti.

-E, -r, --regexp-extended: Tai leidžia mums scenarijuje naudoti išplėstines reguliariąsias išraiškas (perkeliamumui naudokite POSIX -E).

-s, -atskirai: jis naudojamas failams laikyti atskirais, o ne pavieniais ir tęsia ilgą srautą.

--smėlio dėžė: Jis naudojamas dirbti smėlio dėžės režimu.

-u, --nebuferuotas: Jis naudojamas minimaliems duomenų kiekiams įkelti iš įvesties failų ir dažniau išplauna išvesties buferius.

-z, --null-data: Jis naudojamas eilutėms atskirti NUL simboliais.

--pagalba: jis naudojamas žinynui rodyti.

java sinchronizuoti

-- versija: Jis naudojamas versijos informacijai rodyti.

Sed komandos pavyzdžiai

Pažiūrėkime šiuos pavyzdžius:

Taikymas STDIN katalogui

sed komanda neapsiriboja tik failais manipuliuoti; taip pat galime pritaikyti jį STDIN katalogui.

 echo class7 | sed 's/class/jtp/' echo class7 | sed 's/7/10/' cat msg.txt | sed 's/learn/study/' 

Pirmiau pateiktos komandos pakeis pirmąjį tekstą antruoju teksto šablonu. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties, pirma, atlikome komandą „sed“ eilutėje „class7“, kur „class“ pakeičiama į „jtp“, o 7 – į 10. Tada atlikome komandą „sed“ sraute „msg.txt“. “, kur „mokytis“ paverčiama į „studijuoti“.

Pasaulinis pakeitimas

Ankstesniame pavyzdyje visi žodžiai „mokytis“ nebuvo redaguoti į „studijuoti“. Norėdami redaguoti kiekvieną žodį, turime naudoti visuotinį pakaitalą „g“. Jis redaguoja visus nurodytus žodžius faile arba eilutėje.

Sintaksė:

 command | sed 's///g' 

Apsvarstykite toliau pateiktus pavyzdžius:

 echo class7 class9 | sed 's/class/jtp/g' cat msg.txt | sed 's/learn/study/g' 

Aukščiau pateiktos komandos pakeis visą nurodytą teksto šabloną. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties, vykdydami komandą „echo class7 class9 | sed 's/class/jtp/g' visa 'klasė' paverčiama į 'jtp' ir su komanda 'cat msg.txt | sed 's/learn/study/g'' visi 'mokytis' buvo paversti į 'study'.

duomenų ryšio sluoksnio protokolai

Linijos pašalinimas

Parinktis „d“ leis mums pašalinti visą eilutę iš failo. Mums tereikia nurodyti žodį iš tos eilutės su „d“ parinktimi, ir ta eilutė bus ištrinta. Tačiau atminkite, kad visos eilutės su tuo pačiu žodžiu bus ištrintos. Jis bus vykdomas taip:

 cat | sed '//d' 

Apsvarstykite toliau pateiktą komandą:

 cat msg.txt | sed '/jtp/d' 

Aukščiau pateikta komanda ištrins eilutes, kuriose yra žodis „jtp“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties, vykdydami komandą 'cat msg.txt | sed „/jtp/d“ visos eilutės, kuriose yra žodis „jtp“, ištrinamos.

Naudojant komandą Multiple sed

Parinktis „-e“ leidžia vienu metu vykdyti kelias sed komandas. Mes galime atlikti daugiau nei vieną sed operaciją vykdydami komandą taip:

 sed -e ' ; ' 

Apsvarstykite toliau pateiktą komandą:

 sed -e 's/red/blue/; s/yellow/black/' exm.txt 

Aukščiau pateikta komanda pritaikys visas nurodytas operacijas faile „exm.txt“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Kaip matome iš aukščiau pateiktos išvesties, visi „raudoni“ žodžiai pakeičiami „mėlyna“, o visi „geltoni“ – „juoda“. Taip pat galime atskirti tokias komandas:

 sed -e ' >s/red/blue/; >s/yellow/black/' exm.txt 

Rezultatas bus toks pat kaip aukščiau pateikta komanda.

Komandų skaitymas iš failo

Galime išsaugoti sed komandas faile ir iš karto jas taikyti bet kuriame faile. Tai galima padaryti nurodant parinktį „-f“ taip:

 sed -f 

Iš aukščiau pateiktos komandos „“ yra failas, kuriame yra sed komandų sąrašas. Apsvarstykite toliau pateiktą komandą:

 sed -f SedCommands exm.txt 

Aukščiau pateikta komanda taikys visas nurodytas komandas „SedCommand“ faile „exm.txt“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties mes panaudojome komandas, taikomas ankstesniame pavyzdyje. Taigi, išvestis yra tokia pati kaip ankstesniame pavyzdyje.

Veikėjų pakeitimas

Šauktuką (!) galime naudoti kaip eilutės skyriklį. Pavyzdžiui, mes norime pakeisti bash apvalkalą ir pakeisti jį csh apvalkalu „/etc/passwd“. Norėdami tai padaryti, vykdykite žemiau esančią komandą:

 sed 's//bin/bash//bin/csh/' /etc/passwd 

Tą patį rezultatą galime pasiekti vykdydami žemiau esančią komandą:

 sed 's!/bin/bash!/bin/csh!' /etc/passwd 

Apribojant sed

Pagrindinis sed komandos naudojimas apdoroja visą failą. Tačiau galime apriboti sed komandą ir nurodyti bet kurią eilutę. Yra du būdai, kaip apriboti sed komandą:

  • Eilučių diapazonas.
  • Konkrečią eilutę atitinkantis raštas.

Norėdami nurodyti eilutę, galime pateikti skaičių taip:

 sed '3s/Red/Blue/' exm.txt 

Aukščiau pateikta komanda taikys nurodytą operaciją trečioje eilutėje. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties modifikuojama tik trečioji eilutė.

Taip pat galime nurodyti eilučių diapazoną. Norėdami nurodyti eilučių diapazoną, vykdykite komandą taip:

 sed '1,3s/Red/Blue/' exm.txt 

Aukščiau pateikta komanda atnaujins nurodytą tekstą 1 ir 3 eilutėse. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Teksto įterpimas ir pridėjimas

Žymės „i“ ir „a“ naudojamos tekstui įterpti ir pridėti prie failo. „i“ vėliavėlė pridės tekstą prieš eilutę, o vėliavėlė „a“ naudojama tekstui pridėti po eilutės. Apsvarstykite toliau pateiktą komandą:

niūrus vidurkis
 echo 'Another Demo' | sed 'iFirst Demo' 

Aukščiau pateikta komanda įterps tekstą prieš tekstą „Kita demonstracija“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Norėdami pridėti tekstą, vykdykite komandą taip:

 echo 'Another Demo' | sed 'aFirst Demo' 

Aukščiau pateikta komanda pridės tekstą. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Eilučių modifikavimas

„c“ vėliavėlė naudojama tam tikrai eilutei pakeisti. Norėdami pakeisti eilutę, vykdykite komandą taip:

 sed '3cThis is a modified line.' exm.txt 

Aukščiau pateikta komanda atnaujins trečią eilutę. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Taip pat galime naudoti reguliariąją išraišką, norėdami atnaujinti daugiau nei vieną eilutę, turinčią tą patį šabloną. Apsvarstykite toliau pateiktą komandą:

 sed '/Apple is /c Line updated.' exm.txt 

Aukščiau pateikta komanda atnaujins visas eilutes su eilute „Apple is“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Veikėjų transformacija

„Y“ vėliavėlė naudojama simboliams transformuoti. Simbolių transformacija negali apsiriboti konkrečiais įvykiais. Norėdami pakeisti simbolius, vykdykite komandą taip:

 sed 'y/abc/def/' exm.txt 

Aukščiau pateikta komanda simbolius „a“, „b“, „c“ pavers „d“, „e“, „f“. apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Eilučių numerių spausdinimas

„=“ ženklas naudojamas eilutės numeriui spausdinti. Norėdami išspausdinti eilutės numerį, vykdykite komandą taip:

 sed '=' exm.txt 

Aukščiau pateikta komanda parodys failo turinio eilutės numerį. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Lygybės ženklas su parinktimi „-n“ nurodo eilutės numerį, kuriame yra atitinkantis scenarijus. Apsvarstykite toliau pateiktą išvestį:

 sed -n '/mango/=' exm.txt 

Aukščiau pateikta komanda parodys eilutės numerį, kuriame yra žodis „mango“. Apsvarstykite toliau pateiktą išvestį:

Linux Sed filtras

Iš aukščiau pateiktos išvesties matome, kad eilutės numeris 2 turi žodį „mango“.