Ich habe also eine Reihe von Dateien in einem Verzeichnis und muss in jede eine Textzeile einfügen. Sie haben im Wesentlichen das folgende Format:
<VirtualHost *:80>
ServerAdmin gabe@localhost
DocumentRoot /var/www/test1
ServerName test1.local
ServerAlias test1
<Directory "/var/www/test1">
Options All
AllowOverride All
</Directory>
</VirtualHost>
Und ich möchte vor dem Schließen eine Zeile einfügen
</ VirtualHost>Etikett. Meine erste Annahme ist, dass ich dies mit sed tun kann, wahrscheinlich mit diesem Tag übereinstimmend und ersetzend. Ich werde jetzt anfangen, dies zu versuchen, aber wenn jemand eine Möglichkeit hat, dies zu tun, würde ich es gerne hören.
text-processing
sed
gabe.
quelle
quelle
Antworten:
Etwas wie das:
funktioniert. Wenn Sie diesen Befehl für viele Dateien wiederholen möchten, können Sie Folgendes tun:
Wahrscheinlich besser (aber ungetestet) dank @ChrisDown:
quelle
/
für den sed-Ausdruck ist sauberer, da Sie dem Schrägstrich nicht entkommen müssen:'s:</VirtualHost>:yourlinehere\n</VirtualHost>:'
Wenn Sie nichts gegen Perl haben, versuchen Sie:
Der
-i
Schalter speichert Ihre alte Datei mit einer.old
Erweiterung und druckt auf die aktuelle.quelle
Sie können auch "ex" (Befehlszeile vi) verwenden, wenn die gewünschte Bearbeitung sogar etwas kompliziert ist. Beispielsweise möchten Sie das Einfügen nur für eine Instanz von "" durchführen.
Ein Shell-Skript wie dieses kann funktionieren:
Dieser Ansatz bietet Ihnen die Vorteile von "ex": Finden eines Ortes mit Elaboarte-Mustern und "Cursorbewegungen". Sie können beispielsweise ein Muster suchen und dann die nächste Instanz suchen und dann die Einfügung durchführen. Oder Sie können Text ändern, anstatt nur Einfügungen vorzunehmen. Oder Sie können zwischen Bereichen wechseln. Vergessen Sie nicht, dass Sie mit "ex" "verwenden können." wie die aktuelle Zeile, also. / ^ somepatter / s / blah / foo / wird funktionieren.
quelle
Sie können den folgenden einzeiligen Code verwenden, um eine einzelne Zeile oder mehrere Zeilen an einer bestimmten Stelle in einer Datei einzufügen, in Ihrem Fall vor 'VirtualHost'. Der Code sucht im Wesentlichen nach dem Dateinamen (es könnte *. * Sein, wenn Sie die Texte in alle Dateien einfügen möchten) innerhalb des angegebenen Verzeichnisses und seiner Unterverzeichnisse. In den gefundenen Dateien wird nach dem Muster 'VirtualHost' gesucht. Nachdem das Muster gefunden wurde, wird es durch firstline \ nsecondline \ notherlines \ n \ VirtualHost ersetzt. Beachten Sie, dass 'VirtualHost' Teil des zu ersetzenden Textes ist, andernfalls verlieren wir ihn.
quelle