Regina Schaukrug: mehrere Wörter in mehreren txt-Dateien löschen

Beitrag lesen

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:

foo
bar

Das geht mit einem schnellen Skript:

#!/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):

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 ("*" > "*", "/" > "/" e.t.c.) Alternativ bringt Dich vielleicht auch man sed und das Beispiel

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 will sed das nicht können.