Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Regex versagt bei Klammern im String

Mitglied: Maveric

Maveric (Level 1) - Jetzt verbinden

19.11.2013 um 19:08 Uhr, 1744 Aufrufe, 2 Kommentare

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:

01.

02.
csv=meineCsv.csv
03.

04.
# x = Beschreibung(k) + Energieeffizienz (d)
05.
# y = Produktbezeichnung(c) + Engergieeffizenz (d)
06.
x=""
07.
y=""
08.

09.
export IFS="|"
10.

11.
cat $csv | while read a b c d e f g h i j k l m n;
12.
do
13.
        if [[ "$k" =~ "$d" ]]; then
14.
         x="$k";
15.
        else
16.
         x="$k $d";
17.
        fi
18.

19.
        if [[ "$c" =~ "$d" ]]; then
20.
         y="$c";
21.
        else
22.
         y="$c $d";
23.
        fi
24.

25.
        echo "$a|$b|$c|$d|$e|$f|$g|$h|$i|$j|$k|$l|$m|$n|$x|$y";
26.
done > ${csv}tmp
27.
Viele Grüße
Maveric
Mitglied: 64748
19.11.2013 um 20:42 Uhr
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:
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
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
Bitte warten ..
Mitglied: Maveric
19.11.2013 um 20:53 Uhr
Habe die Lösung gefunden...

Ja du hast recht, mein Beispiel funktioniert tadellos. Ich hatte ja geschrieben das ich mit Energieeffiziensklassen Arbeite also
"A+, A++" usw.

Der Fehler Tritt genau hier aut: if [[ "$k" =~ "$d" ]]; then

Der Rechte Ausdruck ist eine Regular Expression und in ihr Steht A+, A++ usw.
Ein "+" in Regex sagt aus, das ein oder mehr Zeichen im von dem Vorrangegangenem
Wort vorhanden sein müssen. Also hat der Zeile nach a oder aa oder aaa gesucht aber nicht nach "A+" oder "A++".

Das mit den Klammern bei den Spalten wo es nicht funktioniert hat war jetzt mal wieder
der beste Zufall überhaupt.

Die Lösung ist demensprechen, den Inhalt der Variable $d zu escapen. Z.b. so: fd=$(echo "$d" | sed -e 's/\+/\\+/g');

Und dann beim Matching dementsprechen if [[ "$k" =~ "$fd" ]]; then

Dann klappt auch alles.

Viele Grüße
Maveric
Bitte warten ..
Ähnliche Inhalte
VB for Applications

VBA Grenzwerte in String prüfen Regex ??? Excel2010

Frage von ChillministratorVB for Applications3 Kommentare

Hallo zusammen, in meiner Tabelle soll der Bereich Z8S9 bis Z76S20 Zeile für Zeile überprüft werden. In den Spalten ...

PHP

Regex: auto link

gelöst Frage von BadgerPHP4 Kommentare

Hallo Leute, mittels folgenden Code durchsuche ich einen String und erzeuge klickbare Links: Den Code selbst habe ich nach ...

Batch & Shell

Powershell Regex anders

gelöst Frage von ukodusBatch & Shell1 Kommentar

Hi, kann es sein, dass die Regex-Implementierung anders ist, als gewohnt? Der Regex funktioniert nämlich auf regexr.com -> Was ...

Batch & Shell

Hilfe bei REGEX

gelöst Frage von istike2Batch & Shell9 Kommentare

Hi, Ich habe hier 5 Strings, die ich mit Script filtern sollte. Kann mir jemand verraten, warum "^ -+ ?(\d*\.?\d+ +1000 ...

Neue Wissensbeiträge
Humor (lol)
Preisvertipper
Information von Dilbert-MD vor 2 TagenHumor (lol)8 Kommentare

Moin! weil heute Freitag ist, zeige ich Euch den Preisvertipper der Woche: vergesst den Acer Predator 21x, der ist ...

Windows Update
Sicherheitsupdate für SQL Server 2014 SP3
Information von sabines vor 4 TagenWindows Update2 Kommentare

Für den SQL Server 2014 existiert ein Sicherheitsupdate. Laut KB Artikel wird es als CU3 angezeigt: Server 2014 SP3 ...

Backup

Veeam Agent für MS Windows - neue Version verfügbar (bedingt jedoch offenbar .NET Framework 4.6)

Information von VGem-e vor 5 TagenBackup1 Kommentar

Moin Kollegen, einer unserer Server zeigte grad an, dass für o.g. Software ein Update verfügbar ist. Ob ein evtl. ...

Python

Sie meinen es ja nur gut - Microsoft hilft python-Entwicklern auf unnachahmliche Weise

Information von DerWoWusste vor 6 TagenPython2 Kommentare

Stellt Euch vor, Ihr nutzt python unter Windows 10 und skriptet damit regelmäßig Dinge. Nach dem Update auf Windows ...

Heiß diskutierte Inhalte
Router & Routing
FritzBox und SynologyNAS VPN
Frage von ndeedyRouter & Routing19 Kommentare

Moin moin. Irgendwie habe ich entweder ein bescheuertes Setup, oder mir bereits komplett die Birne mit Versuchen durchgebraten. Bin ...

Cloud-Dienste
MS Sharepoint generelle Frage zur Einrichtung
Frage von ralf86Cloud-Dienste15 Kommentare

Hallo, ich will den Sharepoint als FileServer nutzen. Hier sollen mehrere Freigabeordner mit unterschiedlichen Berechtigungen erstellt werden z.B. Geschäftsführung ...

Vmware
VMware Update 5.1 zu 6.7U4
gelöst Frage von patrickebertVmware8 Kommentare

Hallo alle zusammen, ich den nächsten Monaten steht für mich die Umstellung zwei neuer physikalischer Server an und ich ...

Exchange Server
Backup MX für Exchange
Frage von Turbo-MasterExchange Server7 Kommentare

Hallo, wir betreiben unseren Exchange-Server an einem DSL-Anschluss ohne feste IP. Dessen URL ist bei unserer Domain als MX ...