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

Frage Entwicklung Batch & Shell

Mitglied: Maveric

Maveric (Level 1) - Jetzt verbinden

19.11.2013 um 19:08 Uhr, 1597 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
Batch & Shell
Batch String bzw. Textdatei mittels Regex durchsuchen und String ausgeben
gelöst Frage von aysxdcBatch & Shell3 Kommentare

Hallo, ich möchte mit einer Batch eine Datei durchsuchen. Z. B: Ich will nach "ProjectCompatibilityVersion=" suchen um auf den ...

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 ...

Entwicklung
RegEx Formulierung
gelöst Frage von Aki-kunEntwicklung3 Kommentare

Grüße zusammen, RegEx und ich sind inkompatibel . Ich bekomme den Ausdruck einfach nicht hin. (AusdruckA oder AusdruckB oder ...

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 ...

Neue Wissensbeiträge
Apple

IOS 11.2.1 stopft HomeKit-Remote-Lücke

Tipp von BassFishFox vor 1 TagApple

Das Update für iPhone, iPad und Apple TV soll die Fernsteuerung von Smart-Home-Geräten wieder in vollem Umfang ermöglichen. Apple ...

Windows 10

Windows 10 v1709 EN murkst bei den Regionseinstellungen

Tipp von DerWoWusste vor 1 TagWindows 10

Dieser kurze Tipp richtet sich an den kleinen Personenkreis, der Win10 v1709 EN-US frisch installiert und dabei die englische ...

Webbrowser

Kein Ton bei Firefox Quantum über RDP

Tipp von Moddry vor 1 TagWebbrowser

Hallo Kollegen! Hatte das Problem, dass der neue Firefox bei mir auf der Kiste keinen Ton hat, wenn ich ...

Internet

EU-DSGVO: WHOIS soll weniger Informationen liefern

Information von sabines vor 1 TagInternet4 Kommentare

Wegen der europäische Datenschutzgrundverordnung stehen die Prozesse um die Registrierung von Domains auf dem Prüfstand. Sollte die Forderungen umgesetzt ...

Heiß diskutierte Inhalte
Hardware
Kein Bild mit nur einer bestimmten Grafikkarten - Mainboard Konfiguration
gelöst Frage von bestelittHardware18 Kommentare

Hallo zusammen, ich hatte schon einmal eine ähnliche Frage gestellt. Damals hatte ich genau das gleiche Problem. Allerdings lies ...

Windows Server
RODC kann nicht aus Domäne entfernt werden
Frage von NilsvLehnWindows Server18 Kommentare

HAllo, ich arbeite in einem Universitätsnetzwerk mit 3 Standorten. Die Standorte haben alle ein ESXi Cluster und auf diesen ...

Netzwerkmanagement
Mehrere Netzwerkadapter in einem PC zu einem Switch zusammenfügen
Frage von prodriveNetzwerkmanagement16 Kommentare

Hallo zusammen Vorweg, ich konnte schon einige IT-Probleme mit Hilfe dieses Forums lösen. Wirklich klasse hier! Doch für das ...

Hardware
Links klick bei Maus funktioniert nicht
gelöst Frage von Pablu23Hardware16 Kommentare

Hallo erstmal. Ich habe ein Problem mit meiner relativ alten maus jedoch denke ich nicht das es an der ...