Kaip naudoti sed komandą „Linux“.
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:
sed
Skelbimas |_+_| 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ę.
SkelbimasNorė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ę (|_+_|).
SkelbimasPirmasis 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:
echo
Skelbimas |_+_| 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ą.
SkelbimasPavyzdž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ų.
SkelbimasJei 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:
- & rsaquo; 2021 m. kibernetinis pirmadienis: geriausi „Apple“ pasiūlymai
- › „Microsoft Excel“ funkcijos ir formulės: koks skirtumas?
- › 5 svetainės, kurias turėtų pažymėti kiekvienas „Linux“ vartotojas
- & rsaquo; 2021 m. kibernetinis pirmadienis: geriausi techniniai pasiūlymai
- › Kompiuterio aplankas yra 40: kaip „Xerox Star“ sukūrė darbalaukį
- › Kaip rasti „Spotify“ supakuotą 2021 m
-e
:sed
:~
:sed
:sed
:^
:/
: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.
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.
SkelbimasTaigi, 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
:sed
:sed
:i
:[]
:*
:1,4
:*
: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.
SkelbimasNorė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
SUSIJĘS: Geriausi Linux nešiojamieji kompiuteriai kūrėjams ir entuziastams
SKAITYTI KITASDave'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ą