Linux-kommandoer og skallferdigheter
sed: Redigere strømmer uten å åpne et redigeringsprogram
sed-redigeringer sidelengs: hele tekststrømmer passerer gjennom den, kommer ut transformert, og ingen editor åpnes. Dens rykte kommer fra -i, som gjør en én-linjes erstatning til en batch-operasjon på tvers av tusenvis av filer, og fra katastrofehistoriene til administratorer som kjørte den uten sikkerhetskopi-suffiks. Den sikre arbeidsflyten endres aldri: kjør substitusjonen synlig, bekreft utdata, legg deretter til -i med et suffiks og behold utgangskoden.
Nøkkelpunkter
- Forhåndsvisning før du forplikter: sed -n '10,20p'-filen viser et linjeområde, og den samme -n pluss p-kombinasjonen skriver bare ut linjer som samsvarer med et regulært uttrykk eller adresse.
- Erstatt med flagg som gjør det du mener: s/gammelt/nyt/g for alle kamper, et tall som 2g for bare den andre, og -E for utvidet regulært uttrykk uten en side med omvendt skråstrek.
- Redigeringer på stedet får et suffiks, ingen unntak: sed -i.bak 's/http://https:/g'-appen holder en sikkerhetskopi med samme navn ved siden av hver endring; det suffikset har reddet flere distribusjoner enn noen redaktørs angrehistorikk.
- Skilletegn er gratis: s|/var/www|/srv/app|g (eller s#...#g) unngår skråstrek-unnslippende kamper når mønsteret ditt er fullt av stier.
- -i er ikke atomisk: et krasj eller en dårlig regex midt-batch en gang la halvt omskrevne filer bak seg, så bulkjobber kjører mot kopier eller git-sporede trær, aldri den eneste kopien.
- GNU og BSD sed er uenige om -i: BSD krever suffikset før skriptet (sed -i '' fungerer på macOS, er ikke en Linux-syntaks), som er enda en grunn til at portabilitetsskript unngår -i helt.
- Delete og isolate er ærlige verb: 'd' fjerner samsvarende linjer (sed '/^#/d' striper kommentarer), og -n med et område isolerer en seksjon; begge leser bedre enn smarte erstatninger.
- Alt tidligere enkeltlinjeredigeringer, bokstavelige flerlinjeblokker eller stateful joins hører hjemme i awk eller et ekte skript; å tvinge sed til å gjøre programmeringsarbeid er hvordan uleselige one-liners blir født.
Feltnotat
Min første sed -i uten et .bak-suffiks traff en produksjons-nginx-konfigurasjon rett før ettermiddagens trafikktopp. Siden den gang har hver redigering på stedet et backup-suffiks, og jeg leser tørrkjøringsutdata før -i i det hele tatt nærmer seg kommandoen.
Vanlige spørsmål
Hvordan redigerer jeg bare linjer som samsvarer med noe annet?
Adresser dem: sed '/cache/s/true/false/' snur sann til usann bare på hurtigbufferlinjer, og områder som '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' omfangsredigeringer til blokker; adressen går først, kommandoen deretter.
Hvorfor vil ikke sed samsvare med endene av linjene i en Windows-redigert fil?
Disse linjene slutter med vognretur-tegn som '$'-ankrene ikke forventer; strip dem med tr først eller normaliser på vei inn, og multiline-innhold hører fortsatt hjemme i awk eller Perl med -0777.
Er sed raskere enn awk for enkle erstatninger?
Marginalt og irrelevant; begge slutter på millisekunder på filer i konfigurasjonsstørrelse. Velg etter lesbarhet, fordi en kollega må løsne one-liner på seks måneder.
Kan jeg sette inn hele konfigurasjonsblokker med sed?
Ja: 'a' legger til etter, 'i' setter inn før, og 'c' erstatter linjen, men hold den innsatte teksten enkel og ensidig; ekte blokker hører hjemme i en malfil eller et riktig klargjøringstrinn.
Slik hjelper Kinetikatech med linux-kommandoer og skallferdigheter
Vi har håndtert dette hundrevis av ganger: Kommandoene og skriptvanene som avgjør om en administrator driver en server eller bekjemper den: søk, transformer, overføring og overvåk tekst og prosesser med verktøyene som finnes i hver basisinstallasjon. Med Sikring av Linux-servere og Serveradministrasjon får du hele løkken: vi evaluerer, implementerer, overvåker kontinuerlig og griper inn i 30 minutter når det haster.