NOC online · 24/7Longview, TX · +1 323 412 0665
KinetikatechServers · Security · Websites
NL

Linux-opdrachten en shell-vaardigheden

sed: Streams bewerken zonder een editor te openen

sed bewerkt zijwaarts: hele tekststromen gaan er doorheen, komen er getransformeerd uit, en er wordt geen editor geopend. De reputatie komt van -i, dat een vervanging van één regel omzet in een batchbewerking voor duizenden bestanden, en van de rampverhalen van beheerders die het uitvoerden zonder een back-upachtervoegsel. De veilige workflow verandert nooit: voer de vervanging zichtbaar uit, bevestig de uitvoer, voeg vervolgens -i toe met een achtervoegsel en bewaar de exitcode.

Kernpunten

  1. Bekijk een voorbeeld voordat je commit: sed -n '10,20p' bestand toont een regelbereik, en dezelfde -n plus p combinatie drukt alleen regels af die overeenkomen met een regex of adres.
  2. Vervang dit door vlaggen die doen wat je bedoelt: s/oud/nieuw/g voor alle overeenkomsten, een getal als 2g voor slechts de seconde, en -E voor uitgebreide regex zonder een pagina met backslash-escapes.
  3. In-place bewerkingen krijgen een achtervoegsel, geen uitzonderingen: sed -i.bak 's/http:/https:/g' app bewaart een back-up met dezelfde naam naast elke wijziging; dat achtervoegsel heeft meer implementaties gered dan de geschiedenis van welke editor dan ook.
  4. Scheidingstekens zijn gratis: s|/var/www|/srv/app|g (of s#...#g) vermijdt slash-escaping-gevechten als je patroon vol paden is.
  5. -i is niet atomair: een crash of een slechte regex halverwege de batch liet ooit half herschreven bestanden achter, dus bulktaken worden uitgevoerd tegen kopieën of door git bijgehouden bomen, nooit de enige kopie.
  6. GNU en BSD sed zijn het niet eens over -i: BSD vereist het achtervoegsel vóór het script (sed -i '' werkt op macOS, is geen Linux-syntaxis), wat nog een reden is waarom portabiliteitsscripts -i volledig vermijden.
  7. Verwijderen en isoleren zijn eerlijke werkwoorden: 'd' verwijdert overeenkomende regels (sed '/^#/d' verwijdert commentaar), en -n met een bereik isoleert een sectie; beide lezen beter dan slimme vervangingen.
  8. Alles behalve bewerkingen van één regel, letterlijke blokken van meerdere regels of stateful joins hoort thuis in awk of een echt script; door sed te dwingen programmeurswerk te doen, ontstaan ​​onleesbare oneliners.

Notitie uit de praktijk

Mijn eerste sed -i zonder het achtervoegsel .bak bereikte een productie-nginx-configuratie vlak voor de middagverkeerspiek. Sindsdien heeft elke interne bewerking een back-upachtervoegsel, en ik lees de uitvoer van de proefbewerking voordat de -i zelfs maar in de buurt van de opdracht komt.

Veelgestelde vragen

Hoe bewerk ik alleen regels die met iets anders overeenkomen?

Adresseer ze: sed '/cache/s/true/false/' verandert true alleen in false op cacheregels, en bereiken als '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' scope-bewerkingen naar blokken; het adres komt als eerste, het commando als tweede.

Waarom komt sed niet overeen met de uiteinden van regels in een door Windows bewerkt bestand?

Deze regels eindigen met 'carriage-return'-tekens die de '$'-ankers niet verwachten; strip ze eerst met tr of normaliseer ze onderweg, en inhoud met meerdere regels hoort nog steeds thuis in awk of Perl met -0777.

Is sed sneller dan awk voor eenvoudige vervangingen?

Marginaal en irrelevant; beide eindigen in milliseconden op bestanden van configuratieformaat. Kies op leesbaarheid, want een collega moet in een half jaar jouw oneliner ontwarren.

Kan ik hele configuratieblokken invoegen met sed?

Ja: 'a' wordt erna toegevoegd, 'i' wordt ervoor ingevoegd en 'c' vervangt de regel, maar houd de ingevoegde tekst eenvoudig en voor één doel; echte blokken horen thuis in een sjabloonbestand of een goede inrichtingsstap.

Hoe Kinetikatech helpt bij linux-opdrachten en shell-vaardigheden

Dit hebben wij al honderden keren opgelost: De opdrachten en scriptgewoonten die beslissen of een beheerder een server beheert of bestrijdt: tekst en processen zoeken, transformeren, overdragen en controleren met de tools die in elke basisinstallatie aanwezig zijn. Met Linux-serverbeveiliging en Serverbeheer krijgt u de volledige cyclus: wij beoordelen, implementeren, bewaken dag en nacht en reageren binnen 30 minuten als het erop aankomt.

Neem contact op met een engineer

Serverprobleem? Gehakte site? Trage website?

Kritieke incidenten binnen 30 minuten beantwoord — 24 uur per dag, 7 dagen per week.

Noodsupport aanvragen support@kinetikatech.com