Kommentieren Sie alle Zeilen, die einem bestimmten Muster entsprechen

Kommentieren Sie alle Zeilen, die einem bestimmten Muster entsprechen

Ich muss alle Zeilen, die „dlclose“ enthalten, für jede Datei im aktuellen Verzeichnis und allen Unterverzeichnissen (rekursiv) auskommentieren. Das ist meine bisher beste Vermutung, basierend auf dem, was ich aus verschiedenen Anleitungen herausfinden konnte.

grep -lIR "dlclose" . | grep -v ".svn" | sed -i 's/.*dlclose.*/\/\/&/g'

Die beiden Greps finden erfolgreich alle Dateien, die ich ändern möchte, aber es sedwird eine Fehlermeldung angezeigt unterminated s command.

Antwort1

Sie versuchen, direkt vor Ort zu bearbeiten (-iMöglichkeit) DieSTDIN.

Entfernen-iOption, es ist nutzlos.

Notiz:

Sie können den Befehl erheblich beschleunigenVermeidung des zweiten Grep, wobei die unnötigen Verzeichnisse im Stammverzeichnis ausgeschlossen werden

Versuchen

grep -lIR --exclude-dir=.svn "dlclose" . | xargs sed -i bak 's/.*dlclose.*/\/\/&/g'  

oder

for f in $(grep -lIR --exclude-dir=.svn "dlclose" .)
do
   sed -i bak 's/.*dlclose.*/\/\/&/g' $f
done

verwandte Informationen