2012-04-18 5 views
15

Ich habe ein irritierendes Closed-Source-Tool, das bestimmte Informationen in seine Konfigurationsdatei schreibt. Wenn Sie dann versuchen, die Konfiguration in einer anderen Datei zu verwenden, wird die alte Datei geladen. Grrr ...Wie entferne ich alle Zeilen, die mit einem Muster übereinstimmen, aus einer Reihe von Dateien?

Glücklicherweise sind die Konfigurationsdateien Text, so dass ich sie kontrollieren kann, und es stellt sich heraus, dass, wenn man nur die störende Zeile aus der Datei entfernt, kein Schaden entsteht.

Aber das Tool setzt die Zeilen wieder ein. Jedes Mal, wenn ich neue Versionen der Konfigurationsdateien einchecken möchte, muss ich alle Zeilen entfernen, die das Symbol openDirFile enthalten.

Ich bin im Begriff, eine Art bash Befehl zu konstruieren, grep -v auf jeder Datei ausführen, speichern Sie das Ergebnis in einer temporären Datei, und löschen Sie dann das Original und benennen Sie die temporäre, aber ich fragte mich, ob jemand von a nette saubere Lösung, oder hatte bereits eine ähnliche Invokation ausgeheckt.

Wie kann dies ohne eine symbolische Verbindung im selben Verzeichnis (favourite.rc-> signals.rc) gelöscht werden?

Antwort

18
sed -i '/openDirFile/d' *.conf 

dies tun das Entfernen auf alle conf Dateien

Sie auch die Zeile mit „find“ Befehl kombiniert werden, wenn Ihre conf Dateien in unterschiedlichen Pfaden befinden.

Beachten Sie, dass -i das Entfernen "an Ort und Stelle" vornehmen wird.

+0

genial, woher wusste ich das nicht? –

0

Dies war der bash-Zauber, der ich kam mit:

for i in *.rc ; do TMP=$(mktemp) ; grep -v openDirFile ${i} >${TMP} ; mv ${TMP} ${i} ; done 

Antwort Kents deutlich überlegen ist.