Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?
28.03.2017, 14:03:08

Einloggen mit Benutzername, Passwort und Sitzungslänge

Mitglieder
  • Mitglieder insgesamt: 17832
  • Letzte: stmk23
Statistiken
  • Beiträge insgesamt: 449048
  • Themen insgesamt: 36263
  • Heute online: 431
  • Am meisten online: 578
  • (15.01.2017, 16:58:34)
Benutzer Online

Autor Thema:  awk punkt escapen  (Gelesen 428 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

awk punkt escapen
« am: 19.03.2017, 22:32:51 »
Moin
mal wieder ne frage zu Regular Expressions und awk und zwar wenn ich als Bedingung ein Feld mit einem Datum (Format dd. mm. yyyy)  abgleichen will muss ich die Punkte ja escapen damit die nicht ersetzt werden (die stehn doch für ein einzelnes Zeichen aber was is dann überhaupt der unterschied zu?  ?)  und escapen macht man ja mit \ aber irgendwie geht


 awk - F";" '22\.03\.2017 {print}'   $Datei


nicht 

Re: awk punkt escapen
« Antwort #1 am: 19.03.2017, 23:06:56 »
@stor der schnitter

awk -F";" '/22.03.2017/ {print}' $Datei

Re: awk punkt escapen
« Antwort #2 am: 19.03.2017, 23:17:30 »
ah ja mit /expr/ hab ich auch mal wo was gelesen hat da vielleicht jemand zufälligerweise ne Quelle wo das gut erklärt ist (ubuntuusers fand ich persönlich nicht soso gut) oder vvielleicht wills ja auch jemand direkt erklären?

Re: awk punkt escapen
« Antwort #3 am: 19.03.2017, 23:22:11 »
die stehn doch für ein einzelnes Zeichen aber was is dann überhaupt der unterschied zu?  ?
Der Punkt "." steht für ein beliebiges Zeichen, das Fragezeichen "?" ist einer der quantifier und bedeutet "das vorangehende Zeichen kommt entweder ein mal oder kein mal vor.

RegEx = A.?C
"ABC" -> Treffer
"AC" ->  Treffer
"ABBC" -> Kein Treffer

Re: awk punkt escapen
« Antwort #4 am: 19.03.2017, 23:25:52 »

Ok alles klar danke Atze

Und nochmal ne sache mit /expr/ vergleiche ich ja dann die gesamte Zeile mit expr und sobald in der Zeile expr vorkommt wird sie ausgegeben. Kann man das dann auch auf nur das 2.Feld beziehen?

Re: awk punkt escapen
« Antwort #5 am: 19.03.2017, 23:36:09 »
Quelle: Ubuntuusers-Wiki
Ausdruck ~ /regulärer Ausdruck/   # allgemein
$1 ~ /^Hallo$/                    # Beispiel: vergleicht das erste Feld der Zeile (siehe "Variablen"); (fast) identisch zum 1. Beispiel oben
Also:
awk -F";" '$2 ~ /22.03.2017/ {print}' $Datei

Re: awk punkt escapen
« Antwort #6 am: 19.03.2017, 23:40:32 »
Und wann brauch ich dann $feld~/expr/ und  wann benutzt man $feld==expr  ?

Re: awk punkt escapen
« Antwort #7 am: 20.03.2017, 00:06:16 »
Und wann brauch ich dann $feld~/expr/ und  wann benutzt man $feld==expr  ?
Entweder $feld ~/exp/ oder $feld == Literal aber niemals $feld == /expr/
z.B.
$1 == "Hallo" # Richtig
$1 == 10 # Richtig
$1 < 25 # Richtig
$1 ~ /exp/ # Richtig

$1 == /exp/ # Falsch
$1 ~ "Hallo" # Falsch

Re: awk punkt escapen
« Antwort #8 am: 20.03.2017, 04:17:52 »
Ein Tipp: Regexe sind eigentlich dazu da, auf mehrere Möglichkeiten zu matchen, z.B. matcht /1.12.2017/ auch auf den 11.12.2017 oder 21.12.2017 oder 31.12.2017.

Wenn die Titelfrage auf Dein Kalenderskript bezogen ist, ist ein Zeichenkettenvergleich die bessere Wahl, also z.B. $1 == "1.12.2017".

Re: awk punkt escapen
« Antwort #9 am: 20.03.2017, 06:35:06 »
Ja es ist für die Kalenderfrage aber ich will alle Termine eines Jahres ausgeben und hatte mir gedacht ich ersetze dd. mm. je durch ein Wildcard allerdings hat das egal wie ichs ggemacht hab einfach nicht funktioniert und als ich dann ohne wildcards probiert hatte hats auch nich funktioniert daher die Frage (erstmal nur wegen dem Datum)... 


Und /expr/ steht also dann für die Zeichen in egal welcher Reihenfolge oder wie?
« Letzte Änderung: 20.03.2017, 16:31:42 von stor der schnitter »

Re: awk punkt escapen
« Antwort #10 am: 20.03.2017, 16:44:55 »
Nein, die Reihenfolge ist genau "expr", allerdings egal wo im String.

ich will alle Termine eines Jahres ausgeben
$1 ~ /2017/ sollte schon reichen

Re: awk punkt escapen
« Antwort #11 am: 20.03.2017, 17:12:05 »
Ok danke.


Für Regular Expressions habe ich noch eine sehr hilfreiche Seite gefunden die auch nochmal die verschiedenen Regular Expressions "Sprachen"/Arten beleuchten. [size=78%]https://www.lrz.de/services/schulung/unterlagen/regul/#beisp1[/size]


(Mein Thema auch bei den Wildcards war hauptsächlich, dass ich noch bei den Wildcards der Bash war und nicht bei denen der Regular Expressions)

Re: awk punkt escapen
« Antwort #12 am: 20.03.2017, 20:18:27 »
also ich habe mich da jetzt mal ja n bissl eingelesen (über den Artikel aber nich gsnz bis zum Ende) kann man bei awk im regExpr Variablen benutzen weil wenn ich


awk -F";" -v"h='2017'" '$2~/h/ {print h}' $Datei


benutze dann gibt awk mir nix aus und nur wenn ich


awk -F";" -v"h='2017'" '$2~/2017/ {print h}' $Datei


benutze gibt awk mir die 2017 aus. Jetzt frage ich mich natürlich waum oder ist in regExpr mit Variablen irgendetwas anders was ich nicht weiß?


(und noch Frage am Rande wenn ich dd und mm mit punkten substituier wo muss dann das carret hin zum negieren brauch ich da dann ne runde KKlammer um den ggesamten bisherigen Ausdruck?)

Re: awk punkt escapen
« Antwort #13 am: 20.03.2017, 20:58:28 »
@stor der schnitter



Ich kann mich des Eindrucks nicht erwehren das du dir das Leben schwerer machst als notwendig.  ;D

Re: awk punkt escapen
« Antwort #14 am: 20.03.2017, 21:18:42 »
Nein es macht schon Sinn (glaub ich zumindest  :-)  ). Weil ich awk die Zahl  (die Jahreszahl) nach der es ssuchen soll erst noch übergeben muss (weil sich die ändert) (daher die Frage nach Variablen). Und das ganze negieren brauch halt auch noch  geht das dann einfach mit $2~/^2017/ oder? (und nein eigentlich will ichs mir nicht extra schwer machen aber ich will auch was lernen dabei und es auch exakt formulieren)