Regex versagt bei Klammern im String
Moin zusammen,
ich habe hier ein leichtes Skript, was jedoch einen winzigen Haken hat.
PROBLEM:
Wenn der Ausgangsstring z.b. "Paul hat einen Bart(Schneider) in seinem Auto" eine Klammer "(" beinhaltet,
wird der gesuchte String z.b. "Paul" oder "Auto" nicht mehr gefunden, obwohl er im Ausgangsstring vorhanden ist.
Wie man im Skript sehen kann, möchte ich, wenn noch nicht vorhanden in jede Produktbezeichnung und
Beschreibung die Energieeffzienz anfügen, sofern sie nicht schon vorhanden ist. Nur damit nicht jmd. noch
fragt wozu ich das bau Bärten und Autos brauche ;).
Ich habe in diesem Fall nur die Option für ein Shell-Skript, sonst hätte ich Perl genommen,
also wäre Vorschläge zu Shell Skripten gern gesehen :=)
Hier mal das Shell-Skript:
Viele Grüße
Maveric
ich habe hier ein leichtes Skript, was jedoch einen winzigen Haken hat.
PROBLEM:
Wenn der Ausgangsstring z.b. "Paul hat einen Bart(Schneider) in seinem Auto" eine Klammer "(" beinhaltet,
wird der gesuchte String z.b. "Paul" oder "Auto" nicht mehr gefunden, obwohl er im Ausgangsstring vorhanden ist.
Wie man im Skript sehen kann, möchte ich, wenn noch nicht vorhanden in jede Produktbezeichnung und
Beschreibung die Energieeffzienz anfügen, sofern sie nicht schon vorhanden ist. Nur damit nicht jmd. noch
fragt wozu ich das bau Bärten und Autos brauche ;).
Ich habe in diesem Fall nur die Option für ein Shell-Skript, sonst hätte ich Perl genommen,
also wäre Vorschläge zu Shell Skripten gern gesehen :=)
Hier mal das Shell-Skript:
csv=meineCsv.csv
# x = Beschreibung(k) + Energieeffizienz (d)
# y = Produktbezeichnung(c) + Engergieeffizenz (d)
x=""
y=""
export IFS="|"
cat $csv | while read a b c d e f g h i j k l m n;
do
if [[ "$k" =~ "$d" ]]; then
x="$k";
else
x="$k $d";
fi
if [[ "$c" =~ "$d" ]]; then
y="$c";
else
y="$c $d";
fi
echo "$a|$b|$c|$d|$e|$f|$g|$h|$i|$j|$k|$l|$m|$n|$x|$y";
done > ${csv}tmp
Viele Grüße
Maveric
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 222404
Url: https://administrator.de/contentid/222404
Ausgedruckt am: 26.11.2024 um 12:11 Uhr
2 Kommentare
Neuester Kommentar
Hallo,
ich hab mal mit Deinem Ausgangsstring rumprobiert, ich kann nicht feststellen, dass das Matching des Satzes "Paul hat einen Bart(Schneider) in seinem Auto" nicht funktioniert. Hier meine Ausgabe:
Sowohl Wörter vor der Klammer, also auch zwischen Klammern und dahinter werden einwandfrei erkannt. Bist Du sicher, dass das Matching das Problem ist? Auch wenn man den Suchstring (z.B. Paul in eine Variable setzt d=Paul) funktioniert es einwandfrei.
Markus
ich hab mal mit Deinem Ausgangsstring rumprobiert, ich kann nicht feststellen, dass das Matching des Satzes "Paul hat einen Bart(Schneider) in seinem Auto" nicht funktioniert. Hier meine Ausgabe:
markus@samsung:~$ cat paul.txt
Paul hat einen Bart(Schneider) in seinem Auto
markus@samsung:~$ x=$(cat paul.txt); if [[ $x =~ "Paul" ]]; then echo "hallo"; fi
hallo
markus@samsung:~$ if [[ $x =~ "Auto" ]]; then echo "hallo"; fi
hallo
markus@samsung:~$ if [[ $x =~ "Audi" ]]; then echo "hallo"; fi
markus@samsung:~$ if [[ $x =~ "Schneider" ]]; then echo "hallo"; fi
hallo
markus@samsung:~$ if [[ $x =~ "schneider" ]]; then echo "hallo"; fi
markus@samsung:~$ if [[ $x =~ "(schn" ]]; then echo "hallo"; fi
markus@samsung:~$ if [[ $x =~ "\(schn" ]]; then echo "hallo"; fi
markus@samsung:~$ if [[ $x =~ "(Schn" ]]; then echo "hallo"; fi
hallo
markus@samsung:~$ if [[ "$x" =~ "(Schn" ]]; then echo "hallo"; fi
hallo
markus@samsung:~$ if [[ $x =~ "(Schn" ]]; then echo "hallo"; fi
hallo
Markus