GNU/Linux >> Linux Esercitazione >  >> Linux

Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern

Ecco una domanda del nostro lettore abituale Mr. Rajan. Vuole usare Sed per cercare e sostituire una linea tra intervalli di pattern. Bene, ecco una sua domanda.

Ho scritto uno script di shell per automatizzare alcune attività su VPS. Ad esempio, volevo modificare httpd.conf e sostituisci "AllowOverride None" to "AllowOverride All" che si trova all'interno di una particolare <Directory "/var/www/html"> . L'idea è di sostituire solo la riga all'interno di quel particolare blocco senza influenzare altri blocchi (in realtà ce ne sono molti, ma sono preoccupato per il blocco che contiene "/var/www/html" ). Il motivo per cui volevo farlo è che ho avuto difficoltà a configurare Apache per consentire le sostituzioni da .htaccess file.

Ad esempio:nel codice seguente da httpd.conf file, devo cercare il pattern <Directory "/var/www/html"> e sostituisci AllowOverride Nessuno con Consenti sovrascrivi tutto che si trova all'interno di questa struttura di directory senza influenzare l'altra struttura di directory.

<Directory "/var/www/html">
 AllowOverride None
 </Directory>

Per favore aiutami.

Utilizzo di Sed per cercare e sostituire una linea tra intervalli di pattern

Questo sembra essere un compito per sed , come sed supporta gli intervalli di pattern in questa forma:

sed '/startpattern/,/endpattern/ <sed-commands>' file

Quindi, come richiesto da Rajan, dobbiamo cercare il modello di partenza <Directory "/var/www/html"> , schema finale </Directory> e trova "AllowOverride None" and replace it with "AllowOverride all" . Per farlo, il sed il comando deve essere utilizzato come mostrato di seguito.

#sed -i '/<Directory "\/var\/www\/html">/,/<\/Directory>/ s/AllowOverride None/AllowOverride all/' httpd.conf

Qui -i l'opzione è quella di modificare i file sul posto. Se non utilizzi l'opzione -i , quindi l'output modificato verrà stampato su stdout e il file non verrebbe modificato!


Linux
  1. Utilizzo di sed per trovare e sostituire file di testo in Linux

  2. Corrispondenza di pattern multilinea utilizzando Sed, Awk o Grep?

  3. Come ottenere un conteggio di file in una directory utilizzando la riga di comando?

  4. Sostituire una riga con un altro contenuto utilizzando Sed e Parallel per un file di grandi dimensioni?

  5. Sostituire Intervallo di linee con Intervallo di linee (sed o altro)?

Come eseguire la ricerca del modello nei file utilizzando Grep

Come rimuovere le righe da un file usando il comando Sed

Sed può sostituire i caratteri di nuova riga?

Prova la ricerca ricorsiva di Sed e sostituisci prima di correre?

Trova e sostituisci il testo in un file tra un intervallo di righe usando sed

Utilizzo di sed per sostituire uno schema specifico