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!