Sie müssen die Datei nach Zieldatei in Partitionen aufteilen und sed -i
jede Datei einzeln ausführen . Angenommen, Sie haben die Dateinamen und Zeilennummern nach Dateiname und in aufsteigender Reihenfolge gruppiert, Sie können so etwas tun
awk '$1 != prev { if (prev) print "\047 " prev; prev=$1; printf "sed -i \047" } { print $2 "s/LOG\\.error/LOG.warn/" } END { if (prev) print "\047 " prev }' filenames.txt | sh
Dies ist ein schneller und schmutziger Hack, der auf interessante und möglicherweise gefährliche Art und Weise aufbricht, wenn die Dateinamen in der ersten Spalte kein einzelnes Token sind.
Grundsätzlich überarbeiten wir Ihre Textdatei in eine Folge von sed
Skripten. So wird dein Beispiel in umgewandelt
sed -i '125s/LOG\.error/LOG.warn 180s/LOG\.error/LOG.warn/ ' FooBar.java sed -i '128s/LOG\.error/LOG.warn/ ' FooBar2.java
Was Sie feststellen werden, ist ein sh
Skript, das sed
für jede Datei ein Skript enthält .
Wenn Sie auf einem * BSD - Plattform (einschließlich Mac OS) sind, müssen Sie ändern sed -i
zu sed -i ''
dem in Awk wäre "sed -i \047\047"
, um richtig zu einfachen Anführungszeichen, ohne die umgebende Schale einbetten zu zitieren (so dass ganze Zeile wird printf "sed -i \047\047 \047" }
(sic)).