Linux-kommandoer og Shell-færdigheder
sed: Redigering af streams uden at åbne en editor
sed-redigeringer sidelæns: hele tekststrømme passerer gennem den, kommer transformeret ud, og ingen editor åbner. Dens omdømme kommer fra -i, som forvandler en en-line substitution til en batch-operation på tværs af tusindvis af filer, og fra katastrofehistorier fra administratorer, der kørte den uden et backup-suffiks. Den sikre arbejdsgang ændres aldrig: kør substitutionen synlig, bekræft outputtet, tilføj derefter -i med et suffiks og behold exitkoden.
Vigtige pointer
- Forhåndsvisning før du forpligter dig: sed -n '10,20p' fil viser et linjeinterval, og den samme -n plus p kombination udskriver kun linjer, der matcher et regex eller en adresse.
- Erstat med flag, der gør, hvad du mener: s/gammelt/nyt/g for alle kampe, et tal som 2g for kun den anden, og -E for udvidet regex uden en side med omvendt skråstreg escapes.
- In-place redigeringer får et suffiks, ingen undtagelser: sed -i.bak 's/http:/https:/g' app holder en sikkerhedskopi med samme navn ud for hver ændring; det suffiks har reddet flere implementeringer end nogen redaktørs fortryd-historik.
- Afgrænsere er gratis: s|/var/www|/srv/app|g (eller s#...#g) undgår skråstreg-undslippende kampe, når dit mønster er fyldt med stier.
- -i er ikke atomisk: et nedbrud eller en dårlig regex midt-batch engang efterladt halvt omskrevne filer bag sig, så massejobs kører mod kopier eller git-trackede træer, aldrig den eneste kopi.
- GNU og BSD sed er uenige om -i: BSD kræver suffikset før scriptet (sed -i '' virker på macOS, er ikke en Linux-syntaks), hvilket er endnu en grund til, at portabilitetsscripts helt undgår -i.
- Delete og isolate er ærlige verber: 'd' fjerner matchende linjer (sed '/^#/d' striber kommentarer), og -n med et interval isolerer en sektion; begge læser bedre end smarte udskiftninger.
- Alt tidligere enkeltlinjeredigeringer, bogstavelige flerlinieblokke eller stateful joins hører til i awk eller et rigtigt script; at tvinge sed til at udføre programmørarbejde er, hvordan ulæselige one-liners bliver født.
Note fra marken
Min første sed -i uden et .bak-suffiks ramte en produktions-nginx-konfiguration lige før eftermiddagens trafikpeak. Siden da har hver redigering på stedet et backup-suffiks, og jeg læser dry-run-outputtet, før -i overhovedet nærmer sig kommandoen.
Ofte stillede spørgsmål
Hvordan redigerer jeg kun linjer, der matcher noget andet?
Adresser dem: sed '/cache/s/true/false/' vender kun sandt til falsk på cache-linjer, og rækker som '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' omfangsredigeringer til blokke; adressen går først, kommandoen derefter.
Hvorfor vil sed ikke matche enderne af linjer i en Windows-redigeret fil?
Disse linjer slutter med vognretur-tegn, som '$'-ankrene ikke forventer; strip dem med tr først eller normaliser på vej ind, og multiline indhold hører stadig til i awk eller Perl med -0777.
Er sed hurtigere end awk for simple udskiftninger?
Marginalt og irrelevant; begge afsluttes på millisekunder på filer i konfigurationsstørrelse. Vælg efter læsbarhed, for en kollega skal udmangle din one-liner om seks måneder.
Kan jeg indsætte hele konfigurationsblokke med sed?
Ja: 'a' tilføjer efter, 'i' indsætter før, og 'c' erstatter linjen, men hold den indsatte tekst enkel og entydig; rigtige blokke hører hjemme i en skabelonfil eller et korrekt klargøringstrin.
Sådan hjælper Kinetikatech med linux-kommandoer og shell-færdigheder
Det er, hvad vi gør i dag: De kommandoer og scriptvaner, der afgør, om en administrator driver en server eller bekæmper den: søg, transformer, overfør og overvåg tekst og processer med de værktøjer, der findes i enhver basisinstallation. Vores Sikkerhed på Linux-servere og Serveradministration dækker det hele, fra vurdering til implementering, overvågning 24/7 og akut responstid på 30 minutter.