GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von Sed zum Suchen und Ersetzen einer Linie zwischen Musterbereichen

Hier ist eine Frage von unserem Stammleser Mr. Rajan. Er möchte Sed verwenden um eine Zeile zwischen Musterbereichen zu suchen und zu ersetzen. Nun, hier ist eine Frage von ihm.

Ich habe ein Shell-Skript geschrieben, um einige Aufgaben auf VPS zu automatisieren. Zum Beispiel wollte ich httpd.conf ändern und ersetzen Sie "AllowOverride None" durch "AllowOverride All" das sich in einem bestimmten befindet . Die Idee ist, nur die Zeile innerhalb dieses bestimmten -Blocks zu ersetzen, ohne andere -Blöcke zu beeinflussen (eigentlich gibt es viele, aber ich mache mir Sorgen um den Block, der "/var/www/html" ). Der Grund, warum ich das tun wollte, ist, dass ich Schwierigkeiten hatte, Apache so zu konfigurieren, dass Überschreibungen von .htaccess zugelassen werden Dateien.

Zum Beispiel:Im folgenden Code aus httpd.conf Datei muss ich nach dem Muster  suchen und ersetzen Sie AllowOverride None mit AllowOverride All innerhalb dieser Verzeichnisstruktur befinden, ohne andere Verzeichnisstrukturen zu beeinflussen.

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

Bitte helfen Sie mir.

Verwenden von Sed zum Suchen und Ersetzen einer Linie zwischen Musterbereichen

Dies scheint eine Aufgabe für sed zu sein , als sed unterstützt Musterbereiche in dieser Form:

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

Gemäß der Anforderung von Rajan müssen wir also nach dem Startmuster suchen , Endmuster  und suchen Sie "AllowOverride None" und ersetzen Sie es durch "AllowOverride all" . Dazu muss der sed Befehl sollte wie unten gezeigt verwendet werden.

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

Hier -i Option ist das Bearbeiten von Dateien an Ort und Stelle. Wenn Sie die Option -i nicht verwenden , dann wird die geänderte Ausgabe auf stdout ausgegeben und die Datei würde nicht verändert!


Linux
  1. Verwenden von sed zum Suchen und Ersetzen von Textdateien in Linux

  2. Mehrzeiliger Musterabgleich mit Sed, Awk oder Grep?

  3. Wie erhalte ich eine Anzahl von Dateien in einem Verzeichnis über die Befehlszeile?

  4. Finden Sie die Zeilennummer, die das Muster enthält, mit benutzerdefiniertem Regex-Trennzeichen?

  5. Wert zwischen zwei Suchmustern in derselben Zeile extrahieren?

So führen Sie eine Mustersuche in Dateien mit Grep durch

So entfernen Sie Zeilen aus einer Datei mit dem Sed-Befehl

Verwenden von grep und sed zum Suchen und Ersetzen einer Zeichenfolge

Das Konzept von 'Hold space' und 'Pattern space' in sed

Suchen und ersetzen Sie Text in einer Datei zwischen einem Zeilenbereich mit sed

Verwenden von sed zum Ersetzen zwischen einem bestimmten Muster