[gelöst] exakten regexp aus txt auslesen?
[gelöst] exakten regexp aus txt auslesen?
Da ist eine Liste (Textdatei) mit tausenden Domains.
Jede einzelne Domain belegt eine eigene Zeile.
Nun möchte ich nur Domains ausgeben, die mit www. beginnen.
Z.B. http://www.example.com, http://www.pla.example.com, usw.
Aber NICHT: www2.exapmle.com, www2.pla.example.com usw.
EDIT: AUCH NICHT SOWAS WIE m.www.linksynergy.com .
Was bisher schon mal nicht funktioniert hat:
grep ^www.
sed -n '/www./p'
sed '/www./!d'
awk '/^www./'
Jede einzelne Domain belegt eine eigene Zeile.
Nun möchte ich nur Domains ausgeben, die mit www. beginnen.
Z.B. http://www.example.com, http://www.pla.example.com, usw.
Aber NICHT: www2.exapmle.com, www2.pla.example.com usw.
EDIT: AUCH NICHT SOWAS WIE m.www.linksynergy.com .
Was bisher schon mal nicht funktioniert hat:
grep ^www.
sed -n '/www./p'
sed '/www./!d'
awk '/^www./'
Zuletzt geändert von debnuxer am 16.09.2013 21:23:33, insgesamt 5-mal geändert.
Das Leben ist wie ein überdimensionales Schachbrett.
Re: exakten regexp aus txt auslesen?
Der Punkt ist bei regulären Ausdrucken ein beliebiges Zeichen. Du musst ihn escapen als \.
Re: exakten regexp aus txt auslesen?
Ah, doch wieder was übersehen, vielen Dank.
Das Leben ist wie ein überdimensionales Schachbrett.
- KBDCALLS
- Moderator
- Beiträge: 22443
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] exakten regexp aus txt auslesen?
Mit fgrep sollte es funktionieren.
Mit fgrep gehts auch ohne Backslash
Code: Alles auswählen
fgrep www\.
Code: Alles auswählen
matthias@svetlana:~/test$ cat test.txt |grep www.
http://www.eins.de
http://www2.zwei.de
http://www3.de
matthias@svetlana:~/test$ cat test.txt |fgrep www\.
http://www.eins.de
matthias@svetlana:~/test$
Code: Alles auswählen
matthias@svetlana:~/test$ cat test.txt |fgrep www.
http://www.eins.de
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] exakten regexp aus txt auslesen?
Danke.
Aber jetzt gibts noch ein Problem, wegen z.B. m.www.linksynergy.com .
fgrep ^www\. klappt nicht.
Aber jetzt gibts noch ein Problem, wegen z.B. m.www.linksynergy.com .
fgrep ^www\. klappt nicht.
Das Leben ist wie ein überdimensionales Schachbrett.
- KBDCALLS
- Moderator
- Beiträge: 22443
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] exakten regexp aus txt auslesen?
Bittesehr
PS: ist das gleiche wie In beiden Fällen wird nach einem exakten String gesucht.
Code: Alles auswählen
matthias@svetlana:~/test$ cat test.txt |fgrep www.
http://www.eins.de
m.www.linksynergy.com
matthias@svetlana:~/test$
Code: Alles auswählen
fgrep
Code: Alles auswählen
grep -f
Das kann ja auch nicht funktionieren. Das www steht ja auch nicht am Anfang der Zeile.debnuxer hat geschrieben:Danke.
Aber jetzt gibts noch ein Problem, wegen z.B. m.www.linksynergy.com .
fgrep ^www\. klappt nicht.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] exakten regexp aus txt auslesen?
Ich meinte das es mit ^ bei fgrep überhaupt nicht funktioniert, es wird dann garnichts ausgegeben.
Und komischerweise funktioniert grep -f bei mir nicht, nur fgrep. Obwohl -f in der Manpage aufgeführt ist.
EDIT:
Habs jetzt einfach so gelöst:
THX
Und komischerweise funktioniert grep -f bei mir nicht, nur fgrep. Obwohl -f in der Manpage aufgeführt ist.
EDIT:
Habs jetzt einfach so gelöst:
Code: Alles auswählen
grep -F www\. | grep ^www.
Zuletzt geändert von debnuxer am 15.09.2013 17:27:15, insgesamt 1-mal geändert.
Das Leben ist wie ein überdimensionales Schachbrett.
- KBDCALLS
- Moderator
- Beiträge: 22443
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] exakten regexp aus txt auslesen?
Sorry das muß ein -F sein. -f ist eine Datei
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] exakten regexp aus txt auslesen?
Ohne Parameter nutzt "fgrep" keine regulären Ausdrücke. Daher nur "www." und auch kein Dach (^). "grep" nutzt dagegen reguläre Ausdrücke, somit z.B. "^www\.". Generell würde ich wenn www am Anfang stehen soll einen regulären Ausdruck bevorzugen. Daher in diesem Fall die Syntax mit "grep" und nicht mit "fgrep".
- KBDCALLS
- Moderator
- Beiträge: 22443
- Registriert: 24.12.2003 21:26:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Dortmund
-
Kontaktdaten:
Re: [gelöst] exakten regexp aus txt auslesen?
Wenn man schon reguläre Ausdrücke haben will/muß dann gleich egrep
Wenn man übrigens das Dach davorsetzt wird bei fgrep garnichts gefunden. Selbst dann nicht wenn das www als erstes steht.
Wenn man übrigens das Dach davorsetzt wird bei fgrep garnichts gefunden. Selbst dann nicht wenn das www als erstes steht.
Was haben Windows und ein Uboot gemeinsam?
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
Kaum macht man ein Fenster auf, gehen die Probleme los.
EDV ist die Abkürzung für: Ende der Vernunft
Bevor du einen Beitrag postest:
- Kennst du unsere Verhaltensregeln
- Lange Codezeilen/Logs gehören nach NoPaste, in Deinen Beitrag dann der passende Link dazu.
Re: [gelöst] exakten regexp aus txt auslesen?
Weil hier gerade ein wenig Verwirrung aufkommt, was RegEx angeht:
fgrep bzw. grep -F hat damit gar nichts am Hut. Es sucht nach fixen Zeichenketten und interpretiert die Argumente nicht als RegEx. Entsprechend matcht \. nur auf tatsaechlich vorhandenes Backslash-Punkt und nicht auf den Punkt -- zumindest wenn man das Argument gequotet uebergeben hat. Sonst expandiert die Shell das (zu garnichts), vergleiche
grep bzw. grep -G sind "normale" RegEx, "basic regular expression". Es funktionieren beispielsweise ^ fuer den Zeilenanfang, . fuer ein beliebiges Zeichen und \. fuer einen Punkt. Ranges mit \{min,max\} gehen also nur escaped.
egrep bzw. grep -E sind erweiterte RegEx, "extended regular expression". Es funktionieren alle Bestandteile von den "basic" RegEx; ausserdem kann man z.B. per foo|bar eine logische oder-Verknuepfung machen. Ranges gehen mit unescaptem {min,max}.
awk verwendet den Regelsatz von egrep, sed macht ungefaehr dasselbe wie grep, laesst sich per -r aber wohl auf den egrep-Standard umstellen. Zu beachten ist, dass POSIX-konformes sed kein + (fuer "eins oder mehr") hat, da muss man \{1,\} nehmen.
Dem TE wuerde ich normales grep empfehlen (ich gehe davon aus, dass die Forensoftware das www.example.com mit http:// kaputtexpandiert hat):Sieht mit den Teststrings von oben so aus:(Ich seh' gerade, den Vorschlag hatte uname oben schon gemacht.)
Die "Loesung" von oben matcht auch auf verkehrte Strings:
Gruss Cae
fgrep bzw. grep -F hat damit gar nichts am Hut. Es sucht nach fixen Zeichenketten und interpretiert die Argumente nicht als RegEx. Entsprechend matcht \. nur auf tatsaechlich vorhandenes Backslash-Punkt und nicht auf den Punkt -- zumindest wenn man das Argument gequotet uebergeben hat. Sonst expandiert die Shell das (zu garnichts), vergleiche
Code: Alles auswählen
$ echo \t\e\s\t
test
$ echo '\t\e\s\t'
\t\e\s\t
$
egrep bzw. grep -E sind erweiterte RegEx, "extended regular expression". Es funktionieren alle Bestandteile von den "basic" RegEx; ausserdem kann man z.B. per foo|bar eine logische oder-Verknuepfung machen. Ranges gehen mit unescaptem {min,max}.
awk verwendet den Regelsatz von egrep, sed macht ungefaehr dasselbe wie grep, laesst sich per -r aber wohl auf den egrep-Standard umstellen. Zu beachten ist, dass POSIX-konformes sed kein + (fuer "eins oder mehr") hat, da muss man \{1,\} nehmen.
Dem TE wuerde ich normales grep empfehlen (ich gehe davon aus, dass die Forensoftware das www.example.com mit http:// kaputtexpandiert hat):
Code: Alles auswählen
$ grep '^www\.'
Code: Alles auswählen
$ cat <<EOF | grep '^www\.'
> www.example.com
> www.blah.example.com
> www2.example.com
> www2.blah.example.com
> m.www.example.com
> EOF
www.example.com
www.blah.example.com
$
Die "Loesung" von oben matcht auch auf verkehrte Strings:
Code: Alles auswählen
$ echo www2.www.example.org | grep -F www\. | grep ^www.
www2.www.example.org
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: [gelöst] exakten regexp aus txt auslesen?
Jetzt aber, zwar unschön aber bisher klappt es:
Code: Alles auswählen
grep -F www\. | grep "^www." | awk '!/www[1-9]./{print ""$1""}'
Das Leben ist wie ein überdimensionales Schachbrett.
Re: [gelöst] exakten regexp aus txt auslesen?
Ich versteh' zwar nicht ganz, wieso du nicht einfach die funktionierende und simple Loesung von oben nimmst (zweite und dritte Codebox von meinem Post).
Aber ich muss dir Recht geben, Pipes sind toll, da kann man noch viel mehr sinnlose Dinger anhaengen:...
Gruss Cae
Aber ich muss dir Recht geben, Pipes sind toll, da kann man noch viel mehr sinnlose Dinger anhaengen:
Code: Alles auswählen
grep -F www\. | grep "^www." | awk '!/www[1-9]./{print ""$1""}' | xxd \
| dd | xxd -r | awk 1 | sed -n p | grep . | tee /dev/null \
| /bin/cp /dev/stdin /dev/stdout | cat
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
Re: [gelöst] exakten regexp aus txt auslesen?
Ok, sorry hab das \ vergessen. Vielen Dank.
Das Leben ist wie ein überdimensionales Schachbrett.
Re: [gelöst] exakten regexp aus txt auslesen?
geschüttelt:Cae hat geschrieben:Code: Alles auswählen
... | cat
Code: Alles auswählen
... | tac | tac
Code: Alles auswählen
... | rev | rev
Code: Alles auswählen
... cat | tac | rev | cat | tac | rev