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

Comandi Linux e competenze della shell

sed: modificare flussi senza aprire un editor

sed modifica lateralmente: interi flussi di testo lo attraversano, escono trasformati e nessun editor si apre. La sua reputazione deriva da -i, che trasforma una sostituzione di una riga in un'operazione batch su migliaia di file, e dalle storie di disastri degli amministratori che lo hanno eseguito senza un suffisso di backup. Il flusso di lavoro sicuro non cambia mai: esegui la sostituzione visibile, conferma l'output, quindi aggiungi -i con un suffisso e mantieni il codice di uscita.

Punti chiave

  • Anteprima prima del commit: il file sed -n '10,20p' mostra un intervallo di righe e la stessa combinazione -n ​​più p stampa solo le righe che corrispondono a una regex o un indirizzo.
  • Sostituisci con flag che fanno quello che intendi: s/old/new/g per tutte le corrispondenze, un numero come 2g solo per il secondo e -E per regex estesa senza una pagina di backslash escape.
  • Le modifiche sul posto ottengono un suffisso, senza eccezioni: l'app sed -i.bak 's/http:/https:/g' mantiene un backup con lo stesso nome accanto a ogni modifica; quel suffisso ha salvato più implementazioni rispetto alla cronologia degli annullamenti di qualsiasi editor.
  • I delimitatori sono gratuiti: s|/var/www|/srv/app|g (o s#...#g) evita combattimenti con slash-escape quando il pattern è pieno di percorsi.
  • -i non è atomico: un arresto anomalo o una brutta regex a metà batch una volta lasciano dietro di sé file semiriscritti, quindi i lavori in blocco vengono eseguiti contro copie o alberi tracciati da git, mai l'unica copia.
  • GNU e BSD sed non sono d'accordo su -i: BSD richiede il suffisso prima dello script (sed -i '' funziona su macOS, non è una sintassi Linux), che è un motivo in più per cui gli script di portabilità evitano completamente -i.
  • Cancellare e isolare sono verbi onesti: 'd' rimuove le righe corrispondenti (sed '/^#/d' rimuove i commenti), e -n con un intervallo isola una sezione; entrambi si leggono meglio delle sostituzioni intelligenti.
  • Tutto ciò che va oltre le modifiche su una sola riga, i blocchi letterali su più righe o le unioni con stato appartiene ad awk o ad uno script reale; costringere sed a fare il lavoro di programmatore è il modo in cui nascono battute illeggibili.

Nota dal campo

Il mio primo sed -i senza suffisso .bak ha raggiunto una configurazione nginx di produzione subito prima del picco di traffico pomeridiano. Da allora ogni modifica sul posto porta un suffisso di backup e ho letto l'output del ciclo di prova prima ancora che -i si avvicinasse al comando.

Domande frequenti

Come faccio a modificare solo le righe che corrispondono a qualcos'altro?

Indirizzali: sed '/cache/s/true/false/' trasforma vero in falso solo sulle righe della cache e intervalli come '/<VirtualHost>/,/<\/VirtualHost>/s/Old/New/g' modifiche dell'ambito ai blocchi; l'indirizzo va per primo, il comando per secondo.

Perché sed non corrisponderà alla fine delle righe in un file modificato da Windows?

Queste righe terminano con caratteri di ritorno a capo che gli ancoraggi '$' non si aspettano; rimuovili prima con tr o normalizzali mentre entri, e il contenuto multilinea appartiene ancora a awk o Perl con -0777.

sed è più veloce di awk per semplici sostituzioni?

Marginalmente e irrilevante; entrambi finiscono in millisecondi su file di dimensioni di configurazione. Scegli in base alla leggibilità, perché un collega deve sbrogliare la tua battuta in sei mesi.

Posso inserire interi blocchi di configurazione con sed?

Sì: 'a' si aggiunge dopo, 'i' si inserisce prima e 'c' sostituisce la riga, ma mantieni il testo inserito semplice e monouso; i blocchi reali appartengono a un file modello o a una fase di provisioning corretta.

Come Kinetikatech aiuta con comandi linux e competenze della shell

Lo abbiamo già risolto centinaia di volte: I comandi e le abitudini di scripting che decidono se un amministratore gestisce un server o lo combatte: cerca, trasforma, trasferisci e supervisiona testo e processi con gli strumenti presenti in ogni installazione di base. Con Sicurezza server Linux e Gestione server, ottiene il ciclo completo: valutiamo, implementiamo, vigiliamo 24 ore su 24 e rispondiamo in 30 minuti quando conta.

Parli con un ingegnere

Problemi al server? Sito violato? Sito lento?

Incidenti critici gestiti in 30 minuti — 24 ore su 24, 7 giorni su 7.

Richiedi supporto urgente support@kinetikatech.com