Linux komandos ir apvalkalo įgūdžiai
sed: srautų redagavimas neatidarant redaktoriaus
sed redaguoja į šoną: per jį praeina ištisi teksto srautai, išeina transformuoti ir neatsidaro jokia redaktorė. Jo reputacija kilusi iš -i, kuri paverčia vienos eilutės pakeitimą į paketinę operaciją tūkstančiuose failų, ir iš nelaimių istorijų administratorių, kurie paleido jį be atsarginės priesagos. Saugi darbo eiga niekada nesikeičia: paleiskite matomą pakeitimą, patvirtinkite išvestį, tada pridėkite -i su priesaga ir palikite išėjimo kodą.
Pagrindiniai punktai
- Peržiūrėkite prieš įsipareigodami: faile sed -n '10,20p' rodomas eilučių diapazonas, o ta pati kombinacija -n plius p spausdina tik eilutes, kurios atitinka reguliarųjį reiškinį arba adresą.
- Pakeiskite vėliavėlėmis, kurios daro tai, ką reiškia: s/old/new/g – visos atitiktys, skaičius, pvz., 2g, tik antrasis, ir -E – išplėstinis reguliarusis reiškinys be pasvirojo brūkšnio puslapio.
- Vietos redagavimas gauna galūnę, be išimčių: sed -i.bak 's/http:/https:/g' programa šalia kiekvieno pakeitimo išsaugo to paties pavadinimo atsarginę kopiją; ši priesaga išgelbėjo daugiau diegimų nei bet kurio redaktoriaus anuliavimo istorija.
- Skirstytuvai yra nemokami: s|/var/www|/srv/app|g (arba s#...#g) išvengia muštynių, kai jūsų šablonas yra pilnas kelių.
- -i nėra atominis: gedimas arba blogas reguliariojo reiškinio vidurinis paketas paliko pusiau perrašytus failus, todėl masinės užduotys veikia prieš kopijas arba medžius su git-tracked, o ne vienintele kopija.
- GNU ir BSD sed nesutaria dėl -i: BSD reikalauja galūnės prieš scenarijų (sed -i '' veikia MacOS, nėra Linux sintaksė), o tai yra dar viena priežastis, dėl kurios perkeliamumo scenarijai visiškai vengia -i.
- Naikinti ir išskirti yra sąžiningi veiksmažodžiai: 'd' pašalina atitinkančias eilutes (sed '/^#/d' išbraukia komentarus), o -n su diapazonu išskiria sekciją; abu skaitomi geriau nei protingi pakaitalai.
- Viskas, kas buvo atlikta vienoje eilutėje, kelių eilučių blokai ar būsenos sujungimai, priklauso awk arba tikram scenarijui; verčiant sed dirbti programuotojo darbą, taip gimsta neįskaitomi vieno eilutės raštai.
Pastaba iš praktikos
Mano pirmasis sed -i be .bak galūnės pasiekė gamybinę nginx konfigūraciją prieš pat popietinį srauto piką. Nuo tada kiekvienas redagavimas vietoje turi atsarginį priesagą, o aš perskaičiau sausosios eigos išvestį prieš tai, kai -i net priartėja prie komandos.
Dažniausiai užduodami klausimai
Kaip redaguoti tik eilutes, kurios atitinka ką nors kita?
Kreipkitės į juos: sed '/cache/s/true/false/' paverčia "true" į "false" tik talpyklos eilutėse, o diapazonai, pvz., "/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g", aprėpia blokus; adresas eina pirmas, komanda antra.
Kodėl sed nesutaps su „Windows“ redaguoto failo eilučių pabaigomis?
Šios eilutės baigiasi karietos grįžimo simboliais, kurių „$“ inkarai nesitiki; Pirmiausia pašalinkite juos naudodami tr arba normalizuokite, o kelių eilučių turinys vis tiek priklauso awk arba Perl su -0777.
Ar sed greitesnis nei awk paprastiems pakeitimams?
Nežymiai ir nereikšmingai; abi baigiasi per milisekundes konfigūracijos dydžio failuose. Rinkitės pagal skaitomumą, nes kolega per šešis mėnesius turi išardyti jūsų vieną įdėklą.
Ar galiu įterpti visus konfigūracijos blokus su sed?
Taip: „a“ prideda po, „i“ įterpia prieš, o „c“ pakeičia eilutę, tačiau įterpiamas tekstas turi būti paprastas ir vienpusis; tikrieji blokai priklauso šablono failui arba tinkamam paruošimo veiksmui.
Kaip Kinetikatech padeda su linux komandos ir apvalkalo įgūdžiai
Štai ką darome šiandien: Komandos ir scenarijų rašymo įpročiai, kurie nusprendžia, ar administratorius valdo serverį, ar su juo kovoja: ieškokite, transformuokite, perkelkite ir prižiūrėkite tekstą bei procesus naudodami įrankius, esančius kiekviename baziniame diegime. Mūsų paslauga Linux serverių sauga ir Serverių administravimas apima viską — nuo vertinimo iki įgyvendinimo, stebėjimo 24/7 ir skubaus reagavimo per 30 minučių.