Kaip naudoti sed komandą „Linux“.

Terminalo langas Linux sistemoje.

Fatmawati Achmad Zaenuri / „Shutterstock“.



Tai gali atrodyti beprotiškai, bet Linux |_+_| komanda yra teksto rengyklė be sąsajos. Galite naudoti jį iš komandinės eilutės, norėdami manipuliuoti tekstu failuose ir srautuose. Parodysime, kaip panaudoti jo galią.

Galia sed

|_+_| komanda yra šiek tiek kaip šachmatai: užtrunka valandą išmokti pagrindus ir visą gyvenimą, kad juos išmoktum (arba bent jau daug praktikos). Parodysime pradinių gambitų pasirinkimą kiekvienoje iš pagrindinių |_+_| kategorijų funkcionalumą.





|_+_| yra srauto redaktorius kuri veikia naudojant vamzdžių įvestį arba teksto failus. Tačiau jis neturi interaktyvios teksto rengyklės sąsajos. Atvirkščiai, jūs pateikiate instrukcijas, kurių ji turi laikytis, kai ji veikia per tekstą. Visa tai veikia „Bash“ ir kituose komandų eilutės apvalkaluose.

Su |_+_| galite atlikti visus šiuos veiksmus:



  • Pasirinkite tekstą
  • Pakaitinis tekstas
  • Pridėkite eilutes prie teksto
  • Ištrinkite eilutes iš teksto
  • Pakeiskite (arba išsaugokite) originalų failą

Savo pavyzdžius susisteminome taip, kad pristatytume ir demonstruotume sąvokas, o ne siekdami sukurti trumpiausias (ir mažiausiai prieinamas) |_+_| komandas. Tačiau šablono atitikimo ir teksto pasirinkimo funkcijos |_+_| labai pasikliaukite reguliariosiomis išraiškomis ( regexes ). Jums reikės šiek tiek su jais susipažinti, kad galėtumėte kuo geriau išnaudoti |_+_|.

SUSIJĘS: Kaip naudoti reguliariąsias išraiškas (regexes) sistemoje „Linux“.

Paprastas pavyzdys

Pirmiausia naudosime |_+_| siųsti tekstą į |_+_| per vamzdį , ir turi |_+_| pakeisti teksto dalį. Norėdami tai padaryti, įvedame šiuos žodžius:



sedSkelbimas

|_+_| komanda siunčia howtogonk į |_+_| ir taikoma mūsų paprasta pakeitimo taisyklė (s reiškia pakeitimą). |_+_| įvesties tekste ieško pirmosios eilutės atvejo ir visus atitikmenis pakeis antrąja.

Styga gonk pakeičiama geek, o nauja eilutė išspausdinama terminalo lange.

Pakeitimai yra turbūt dažniausiai naudojamas |_+_|. Tačiau prieš gilindamiesi į pakaitalus, turime žinoti, kaip pasirinkti ir suderinti tekstą.

Teksto pasirinkimas

Mums reikės tekstinio failo mūsų pavyzdžiams. Naudosime vieną, kurioje yra eilėraščių iš Samuelio Tayloro Coleridge'o epinės poemos „Senovės jūreivio rimtis“.

Įvedame toliau pateiktą tekstą, kad pažvelgtume į jį su |_+_|:

sed

Norėdami pasirinkti kai kurias eilutes iš failo, pateikiame norimos pasirinkti diapazono pradžios ir pabaigos eilutes. Vienas skaičius pasirenka tą vieną eilutę.

Skelbimas

Norėdami išgauti eilutes nuo vienos iki keturių, įvedame šią komandą:

sed

Atkreipkite dėmesį į kablelį tarp |_+_| ir |_+_|. |_+_| reiškia spausdinti suderintas eilutes. Pagal numatytuosius nustatymus |_+_| spausdina visas eilutes. Pamatytume visą failo tekstą su atitinkamomis eilutėmis, atspausdintomis du kartus. Norėdami to išvengti, naudosime |_+_| (tyli) parinktis, leidžianti nuslėpti neprilygstamą tekstą.

Keičiame eilučių numerius, kad galėtume pasirinkti kitą eilutę, kaip parodyta toliau:

sed

Galime naudoti |_+_| (išraiška) galimybė atlikti kelis pasirinkimus. Su dviem posakiais galime pasirinkti dvi eilutes, pavyzdžiui:

sed

Jei sumažinsime pirmąjį skaičių antroje išraiškoje, tarp dviejų eilučių galime įterpti tuščią vietą. Įrašome taip:

sed

Taip pat galime pasirinkti starto liniją ir pasakyti |_+_| Norėdami pereiti per failą ir spausdinti alternatyvias eilutes, kas penktą eilutę arba praleisti bet kokį eilučių skaičių. Komanda yra panaši į tas, kurias naudojome aukščiau, norėdami pasirinkti diapazoną. Tačiau šį kartą skaičiams atskirti vietoj kablelio naudosime tildę (|_+_|).

Skelbimas

Pirmasis skaičius nurodo starto liniją. Antrasis skaičius rodo |_+_| kurias linijas po starto linijos norime matyti. Skaičius 2 reiškia kas antrą eilutę, 3 – kas trečią eilutę ir pan.

Įrašome taip:

sed

Ne visada žinosite, kur faile yra ieškomas tekstas, o tai reiškia, kad eilučių numeriai ne visada bus naudingi. Tačiau taip pat galite naudoti |_+_| norėdami pasirinkti eilutes, kuriose yra atitinkamų teksto šablonų. Pavyzdžiui, išskirkime visas eilutes, kurios prasideda Ir.

Taškas (|_+_|) reiškia eilutės pradžią. Paieškos terminą įtrauksime pasviraisiais brūkšniais (|_+_|). Taip pat įtraukiame tarpą po to, todėl tokie žodžiai kaip „Android“ nebus įtraukti į rezultatą.

Skaitymas |_+_| scenarijai iš pradžių gali būti šiek tiek sunkūs. |_+_| reiškia spausdinti, kaip ir anksčiau naudotose komandose. Tačiau šioje komandoje prieš ją yra pasvirasis brūkšnys:

sed

Trys eilutės, kurios prasideda raide Ir, yra išgaunamos iš failo ir rodomos mums.

Pakeitimų darymas

Pirmajame pavyzdyje parodėme šį pagrindinį |_+_| formatą pakeitimas:

echoSkelbimas

|_+_| pasakoja |_+_| tai yra pakaitalas. Pirmoji eilutė yra paieškos šablonas, o antroji yra tekstas, kuriuo norime pakeisti tą atitikusį tekstą. Žinoma, kaip ir visuose Linux dalykuose, velnias slypi detalėse.

Įvedame toliau pateiktą informaciją, kad pakeistume visus dienos į savaitę reiškinius ir suteiktume jūrininkui ir albatrosui daugiau laiko susieti:

sed

Pirmoje eilutėje pakeičiamas tik antrasis dienos įvykis. Taip yra todėl, kad |_+_| sustoja po pirmųjų rungtynių vienoje eilutėje. Turime pridėti g reiškinio pabaigoje, kaip parodyta toliau, kad atliktume visuotinę paiešką, kad būtų apdorotos visos atitiktys kiekvienoje eilutėje:

sed

Tai atitinka tris iš keturių pirmoje eilutėje. Nes pirmas žodis yra diena, ir |_+_| Skiriamos didžiosios ir mažosios raidės, ji nelaiko to atvejo kaip diena.

Įrašome taip, pridėdami |_+_| į komandą išraiškos pabaigoje, kad būtų rodomas didžiųjų ir mažųjų raidžių nejautrumas:

echo

Tai veikia, bet ne visada norėsite viskam įjungti didžiųjų ir mažųjų raidžių skirtumą. Tokiais atvejais galite naudoti reguliariųjų reiškinių grupę, kad pridėtumėte konkrečiam modeliui būdingą didžiųjų ir mažųjų raidžių nejautrumą.

Skelbimas

Pavyzdžiui, jei simbolius pateikiame laužtiniuose skliaustuose (|_+_|), jie interpretuojami kaip bet kuris simbolis iš šio simbolių sąrašo.

Įrašome šiuos žodžius ir įtraukiame D ir d į grupę, kad įsitikintume, kad ji atitinka ir dieną, ir dieną:

sed

Taip pat galime apriboti failo dalių keitimus. Tarkime, kad mūsų faile pirmoje eilutėje yra keistų tarpų. Norėdami pamatyti pirmąją eilutę, galime naudoti šią pažįstamą komandą:

sed

Ieškosime dviejų tarpų ir pakeisime juos vienu. Tai darysime visame pasaulyje, kad veiksmas būtų kartojamas visoje eilutėje. Kad būtų aišku, paieškos šablonas yra tarpas, tarpo žvaigždutė (|_+_|), o pakeitimo eilutė yra vienas tarpas. |_+_| apriboja pirmąsias keturias failo eilutes.

Visa tai sujungiame į šią komandą:

sed

Tai veikia gražiai! Paieškos modelis čia yra svarbus. Žvaigždutė (|_+_|) reiškia nulį ar daugiau ankstesnio simbolio, kuris yra tarpas. Taigi, paieškos šablonas ieško vienos ar daugiau tarpų eilučių.

Skelbimas

Jei bet kurią kelių tarpų seką pakeisime vienu tarpu, faile grąžinsime įprastus tarpus ir paliksime vieną tarpą tarp kiekvieno žodžio. Tai taip pat kai kuriais atvejais pakeis vieną erdvę į vieną erdvę, tačiau tai neturės jokios neigiamos įtakos – vis tiek pasieksime norimą rezultatą.

Jei įvesime toliau pateiktą informaciją ir sumažinsime paieškos šabloną iki vienos vietos, iškart pamatysite, kodėl turime įtraukti du tarpus:

less

Kadangi žvaigždutė atitinka nulį ar daugiau ankstesnio simbolio, kiekvieną simbolį, kuris nėra tarpas, ji mato kaip nulį ir taiko jam pakaitalą.

Tačiau jei į paieškos šabloną įtrauksime du tarpus, |_+_| turi rasti bent vieną tarpo simbolį prieš taikydamas pakaitalą. Tai užtikrina, kad netarpiniai simboliai liks nepaliesti.

Naudodami |_+_| įvedame toliau pateiktą informaciją (išraiška), kurią naudojome anksčiau, o tai leidžia vienu metu atlikti du ar daugiau pakaitalų:

1

Galime pasiekti tą patį rezultatą, jei naudosime kabliataškį (|_+_|), kad atskirtume dvi išraiškas, pavyzdžiui:

4

Skelbimas

Kai šioje komandoje dieną pakeitėme savaite, dienos egzempliorius reiškinyje well a-day taip pat buvo pakeistas:

p

Norėdami to išvengti, galime bandyti pakeisti tik eilutes, kurios atitinka kitą šabloną. Jei pakeisime komandą, kad pradžioje būtų paieškos šablonas, apsvarstysime galimybę naudoti tik tą šabloną atitinkančias eilutes.

Įvedame šį žodį, kad atitikimo šablonas būtų žodis po:

sed

Tai suteikia mums norimą atsakymą.

Sudėtingesni pakaitalai

Leiskite Coleridge pailsėti ir naudoti |_+_| norėdami išgauti pavadinimus iš |_+_| failą.

Yra trumpesnių būdų tai padaryti (daugiau apie tai vėliau), bet mes naudosime ilgesnį būdą, norėdami parodyti kitą koncepciją. Kiekvienas atitikęs elementas paieškos šablone (vadinamas posakiais) gali būti sunumeruotas (daugiausia iki devynių elementų). Tada galite naudoti šiuos skaičius savo |_+_| komandas, kurios nurodo konkrečias poraiškius.

Kad tai veiktų, turite įterpti posakį skliausteliuose [|_+_|]. Prieš skliaustus taip pat turi būti pasvirasis brūkšnys (|_+_|), kad jie nebūtų traktuojami kaip įprastas simbolis.

Norėdami tai padaryti, įveskite:

-n

Išskaidykime tai:

    -e:|_+_| komandą ir pakeitimo išraiškos pradžią. sed:Pradinis skliaustas [|_+_|], apimantis posakį, prieš kurį yra pasvirasis brūkšnys (|_+_|). ~:Pirmoje paieškos termino posakyje yra grupė laužtiniuose skliaustuose. Caret (|_+_|) reiškia, kad nenaudojamas grupėje. Grupė reiškia, kad bet koks simbolis, kuris nėra dvitaškis (|_+_|), bus priimtas kaip atitikmuo. sed:Baigiamasis skliaustas [|_+_|] su pasviruoju brūkšniu (|_+_|). sed:Ši antroji paieškos posakis reiškia bet kokį simbolį ir bet kokį jų skaičių. ^:Išraiškos pakeitimo dalyje yra |_+_| prieš pasvirąjį brūkšnį (|_+_|). Tai reiškia tekstą, atitinkantį pirmąją posakį. /:Baigiamasis pasvirasis brūkšnys (|_+_|) ir viena kabutė (|_+_|) užbaigia |_+_| komandą.
Skelbimas

Visa tai reiškia, kad ieškosime bet kokios simbolių eilutės, kurioje nėra dvitaško (|_+_|), kuri bus pirmasis atitinkančio teksto atvejis. Tada toje eilutėje ieškome ko nors kito, o tai bus antrasis atitinkančio teksto atvejis. Mes pakeisime visą eilutę tekstu, kuris atitiko pirmąją posakį.

Kiekviena eilutė |_+_| failas prasideda dvitaškiu baigtu vartotojo vardu. Suderiname viską iki pirmojo dvitaško, o tada visą eilutę pakeičiame šia verte. Taigi, mes išskyrėme naudotojų vardus.

Išvestis iš

Tada antrą posakį įtrauksime skliausteliuose [|_+_|], kad galėtume nurodyti ir skaičių. Taip pat pakeisime |_+_| su |_+_|. Mūsų komanda dabar pakeis visą eilutę viskuo nuo pirmojo dvitaškio (|_+_|) iki eilutės pabaigos.

Įrašome taip:

sed

Tie nedideli pakeitimai apverčia komandos reikšmę ir gauname viską, išskyrus vartotojo vardus.

Dabar pažvelkime į greitą ir paprastą būdą tai padaryti.

Mūsų paieškos terminas yra nuo pirmojo dvitaškio (|_+_|) iki eilutės pabaigos. Kadangi mūsų pakeitimo išraiška tuščia (|_+_|), atitikusio teksto niekuo nepakeisime.

Skelbimas

Taigi, mes įvedame šiuos žodžius, nupjaudami viską nuo pirmojo dvitaškio (|_+_|) iki eilutės pabaigos, palikdami tik naudotojų vardus:

/p

Pažiūrėkime į pavyzdį, kuriame nurodome pirmąją ir antrąją atitiktį toje pačioje komandoje.

Turime kablelių (|_+_|), atskiriančių vardus ir pavardes, failą. Norime juos išvardyti kaip pavardę, vardą. Galime naudoti |_+_|, kaip parodyta toliau, norėdami pamatyti, kas yra faile:

sed

Kaip daug |_+_| komandas, ši kita iš pradžių gali atrodyti neįveikiama:

s

Tai pakeitimo komanda, kaip ir kitos, kurias naudojome, o paieškos šablonas yra gana paprastas. Mes jį išskaidysime toliau:

    sed:Įprasta pakeitimo komanda. sed:Kadangi „Caret“ nėra grupėje (|_+_|), tai reiškia eilutės pradžią. sed:Pirmoji poraiška yra bet koks bet kokių simbolių skaičius. Jis pateikiamas skliausteliuose [|_+_|], prieš kiekvieną iš jų yra pasvirasis brūkšnys (|_+_|), kad galėtume nurodyti jį skaičiumi. Visas mūsų paieškos modelis iki šiol verčiamas kaip paieška nuo eilutės pradžios iki pirmojo kablelio (|_+_|), ieškant bet kokio skaičiaus bet kokių simbolių. i:Kita posakis yra (vėl) bet koks bet kurio simbolio skaičius. Jis taip pat yra skliausteliuose [|_+_|], prieš kuriuos abu yra pasvirasis brūkšnys (|_+_|), kad galėtume nurodyti atitinkantį tekstą pagal skaičių. []:Dolerio ženklas (|_+_|) reiškia eilutės pabaigą ir leis tęsti paiešką iki eilutės pabaigos. Mes tai panaudojome tiesiog norėdami pristatyti dolerio ženklą. Mums to čia tikrai nereikia, nes pagal šį scenarijų žvaigždutė (|_+_|) būtų eilutės pabaigoje. Pasvirasis brūkšnys (|_+_|) užbaigia paieškos šablono skiltį. *:Kadangi mes įtraukėme dvi savo posakius skliausteliuose, galime nurodyti jas abi pagal jų skaičių. Kadangi norime pakeisti tvarką, įvedame juos kaip |_+_|. Prieš skaičius turi būti pasvirasis brūkšnys (|_+_|). 1,4:Tai leidžia mūsų komandai veikti visame pasaulyje kiekvienoje eilutėje. *:Failas, prie kurio dirbame.

Taip pat galite naudoti komandą Iškirpti (|_+_|), kad pakeistumėte visas eilutes, atitinkančias jūsų paieškos šabloną. Įvedame toliau pateiktą tekstą, norėdami ieškoti eilutės su žodžiu kaklelis ir pakeisti ją nauja teksto eilute:

sed

Skelbimas

Mūsų nauja eilutė dabar rodoma ištraukos apačioje.

Eilučių ir teksto įterpimas

Taip pat į failą galime įterpti naujų eilučių ir teksto. Norėdami įterpti naujas eilutes po bet kurių atitinkančių eilučių, naudosime komandą Pridėti (|_+_|).

Štai failas, su kuriuo dirbsime:

kačių geeks.txt

Sunumeravome eilutes, kad būtų lengviau tai sekti.

Įvedami taip, norėdami ieškoti eilučių, kuriose yra žodis He, ir po jomis įterpiame naują eilutę:

-e

Įvedame toliau pateiktą tekstą ir įtraukiame komandą Įterpti (|_+_|), kad įterptume naują eilutę virš tų, kuriose yra atitinkantis tekstas:

;

Galime naudoti ampersandą (|_+_|), kuris reiškia originalų atitikusį tekstą, norėdami pridėti naują tekstą į atitinkamą eilutę. |_+_| , |_+_| ir t. t. reiškia atitinkančias posakius.

Skelbimas

Norėdami pridėti tekstą prie eilutės pradžios, naudosime pakeitimo komandą, kuri atitinka viską, kas yra eilutėje, kartu su pakeitimo sąlyga, kuri sujungia mūsų naują tekstą su pradine eilute.

Norėdami visa tai padaryti, įvedame taip:

sed

Įvedame šiuos žodžius, įskaitant |_+_| komanda, kuri pridės tuščią eilutę tarp kiekvienos eilutės:

etc/passwd

Jei norite pridėti dvi ar daugiau tuščių eilučių, galite naudoti |_+_|, |_+_| ir pan.

Eilučių trynimas

Komanda Naikinti (|_+_|) ištrina eilutes, kurios atitinka paieškos šabloną, arba tas, kurios nurodytos su eilučių numeriais ar diapazonais.

Pavyzdžiui, norėdami ištrinti trečią eilutę, įvestume taip:

sed

Norėdami ištrinti keturių–penktų eilučių diapazoną, įveskite:

()Skelbimas

Norėdami ištrinti eilutes už diapazono ribų, naudojame šauktuką (|_+_|), kaip parodyta toliau:

Pakeitimų išsaugojimas

Iki šiol visi mūsų rezultatai buvo atspausdinti terminalo lange, bet dar niekur jų neišsaugojome. Jei norite, kad jie būtų nuolatiniai, galite įrašyti pakeitimus į pradinį failą arba peradresuoti juos į naują.

Pradinio failo perrašymas reikalauja tam tikro atsargumo. Jei jūsų |_+_| komanda neteisinga, galite atlikti kai kuriuos pradinio failo pakeitimus, kuriuos sunku anuliuoti.

Kad būtų ramu, |_+_| gali sukurti originalaus failo atsarginę kopiją prieš vykdydamas komandą.

Galite naudoti parinktį Vietoje (|_+_|), kad nurodytumėte |_+_| norėdami įrašyti pakeitimus į pradinį failą, bet jei prie jo pridėsite failo plėtinį, |_+_| sukurs atsarginę pradinio failo kopiją į naują. Jis turės tokį patį pavadinimą kaip ir originalus failas, bet su nauju failo plėtiniu.

Norėdami parodyti, ieškosime visų eilučių, kuriose yra žodis Jis, ir jas ištrinsime. Taip pat sukursime atsarginę pradinio failo kopiją į naują naudodami BAK plėtinį.

Norėdami visa tai padaryti, įvedame taip:

sed 's/Skelbimas

Norėdami įsitikinti, kad atsarginės kopijos failas nepasikeitė, įvedame šiuos duomenis:

sed

Taip pat galime įvesti šiuos duomenis, norėdami nukreipti išvestį į naują failą ir pasiekti panašų rezultatą:

(

Mes naudojame |_+_| kad patvirtintumėte, kad pakeitimai buvo įrašyti naujame faile, kaip parodyta toliau:

(

SUSIJĘS: Kaip jūs iš tikrųjų naudojate Regex?

Išsiaiškinęs Visa tai

Kaip tikriausiai pastebėjote, net šis greitas gruntas ant |_+_| yra gana ilgas. Šioje komandoje yra daug, ir yra net su juo galite padaryti daugiau .

Tačiau tikimės, kad šios pagrindinės koncepcijos suteikė tvirtą pagrindą, kuriuo galėsite remtis toliau mokydamiesi daugiau.

SUSIJĘS: 10 pagrindinių Linux komandų pradedantiesiems

Linux komandos
Failai deguto · pv · katė · tac · chmod · sukibimas · skirt · sed · Su · vyras · pastūmėtas · popd · fsck · testinis diskas · sek · fd · pandoc · CD · $PATH · awk · prisijungti · jq · sulankstyti · unikalus · Journalctl · uodega · valstybė · ls · fstab · išmetė · mažiau · chgrp · chown · rev · žiūrėk · stygos · tipo · pervadinti · užtrauktukas · išpakuokite · kalnas · umount · diegti · fdisk · mkfs · rm · rmdir · rsync · df · gpg · mes · nano · mkdir · · ln · pleistras · Paversti · rclone · susmulkinti · SRM
Procesai slapyvardis · ekranas · viršuje · malonu · renicija · progresas · trasa · sistema · tmux · chsh · istorija · adresu · partija · Laisvas · kurios · dmesg · usermod · ps · chroot · xargs · tty · rausvas · lsof · vmstat · laikas baigėsi · siena · taip · nužudyti · miegoti · sudo · jo · laikas · sugrupuoti · usermod · grupėse · lshw · išjungti · paleisti iš naujo · sustabdyti · išjungti · passwd · lscpu · crontab · data · bg · fg
Tinklo kūrimas netstat · ping · traceroute · ip · ss · Kas yra · fail2ban · bmon · tu · pirštu · nmap · ftp · garbanoti · wget · PSO · kas aš esu · Į · iptables · ssh-keygen · ufw

SUSIJĘS: Geriausi Linux nešiojamieji kompiuteriai kūrėjams ir entuziastams

SKAITYTI KITAS Dave Dave'as McKay'us
Dave'as McKay'us pirmą kartą naudojo kompiuterius, kai buvo madinga perforuoto popieriaus juosta, ir nuo tada jis programuoja. Daugiau nei 30 metų IT pramonėje jis dabar yra visą darbo dieną dirbantis technologijų žurnalistas. Per savo karjerą jis dirbo laisvai samdomu programuotoju, tarptautinės programinės įrangos kūrimo komandos vadovu, IT paslaugų projektų vadovu, o pastaruoju metu – duomenų apsaugos pareigūnu. Jo raštą paskelbė howtogeek.com, cloudsavvyit.com, itenterpriser.com ir opensource.com. Dave'as yra Linux evangelistas ir atvirojo kodo advokatas.
Skaityti visą biografiją

Įdomios Straipsniai