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 "/var/www/html".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!