mehrere Wörter in mehreren txt-Dateien löschen
bearbeitet von Regina Schaukrug`man sed` sagt:
~~~
-f script-file,
~~~
das kann viele Zeilen a la `s/zu ersetzende Wörter/ERSETZUNGSTEXT/g` enthalten.
also
~~~
s/foo/Platzhalter/g
s/bar/Platzhalter/g
~~~
diese Datei wiederum kann man aus einer Wortliste erzeugen:
~~~txt
foo
bar
~~~
Das geht mit einem schnellen Skript:
~~~bash
#!/bin/bash
### make-sed-skript.sh
flag="true";
while [ ${flag} = "true" ];
do
read zeile;
zeile=$(echo -e "${zeile}" | tr -d "\n\r");
zeile=$(echo -e "${zeile}" | sed "s/\//\/");
if [ -n "${zeile}" ];
then
echo "s/${zeile}//g";
else
flag="false";
fi
done;
~~~
Aufruf:
~~~
cat woerter.txt | ./make-sed-skript.sh > delete.sed
~~~
Ergebnis (delete.sed):
~~~sed
s/foo//g
s/bar//g
~~~
jetzt also:
~~~
sed -f delete.sed < deineTextdatei
~~~
Beachte bitte, dass da auch ggf. auch noch eine Reihe von speziellen, in regulären Ausdrücken benutzte Zeichen "escaped" werden müssen ({::nomarkdown}"*" > "\*", "/" > "\/"{:/} e.t.c.) Alternativ bringt Dich vielleicht auch `man sed` und das Beispiel
~~~sh
echo "foo Bar baz" | sed -r "s/foo|bar/platzhalter/gi";
~~~
weiter. Aber auch hier muss das `s/foo\|bar/platzhalter/gi` in einer Textdatei untergebracht werden, weil die Zeilenlänge ggf. beschränkt und die Wortliste zu lang ist. Beachte das "sed -r" für "erweiterte reguläre Ausdrücke". Sonst kann sed das nicht.