[linux-l] sed und grep: Dateiteile löschen

Steffen Solyga solyga at absinth.net
Mi Dez 16 15:57:42 CET 2009


Automatische Dateimodifikationen vertraue ich keinem Skript gern an...
selbst wenn Backup vorhanden, machte ja Arbeit.
Was ist rli?
Wenn die Dateien flach vor Dir liegen, ist die Liste leicht zu erzeugen
$ for i in *; do grep -q "suchstring" "$i" && echo "$i"; done > ergebnis.txt
oder mit neuesten grep features
$ grep -l "suchstring" * > ergebnis.txt
Die Liste ist zwar schön zum Editieren (durchaus empfehlenswert, schon
als Test), macht die Weiterverabeitung aber schwieriger.
Wenn Du keine Blanks in Dateinamen hast, geht's noch
$ for i in `cat ergebnis.txt`; do sed s/"suchstring"//g "$i" >
xyz.txt; mv xyz.txt "$i"; done
Falls doch, muß Du Deine ergebnis.txt wieder lesen, so vielleicht
$ cat ergebnis.txt | ( read i; if [ "i" -eq "" ]; then exit; fi; sed
s/"suchstring"//g "$i" > xyz.txt; mv xyz.txt "$i")

Einfacher wäre es, ohne Dateiliste zu arbeiten, weil Du den
separierten Dateinamen schon in der Hand hältst
$ for i in *; do grep -q "suchstring" "$i" && sed s/"suchstring"//g
"$i" > xyz.txt; mv xyz.txt "$i"; done
oder gar
$ for i in *; do sed s/"suchstring"//g "$i" > xyz.txt; mv xyz.txt "$i"; done

Gruß, Steffen



Mehr Informationen über die Mailingliste linux-l