Grep Befehl
Grep Befehl
Guten Abend liebe Community,
Ich brauche eure Hilfe, ich arbeite gerade an meinen Abgaben für die FH und bin an dieser Stelle hängen geblieben.
Das ist der Code:
#!/bin/bash
# Es wird nach den Postleitzahlen mit 8
# gesucht
echo "Treffer: "
# Listeninhalt ist Ergebnis einen Kommandos
grepliste=$(egrep -o "plz=$|[0-9]{3,5}" personen.xml -nm5)
# $liste[*] liefert einfach den kompletten
# Inhalt der Liste
for erg in ${grepliste[*]}
do
echo $erg
done
Diese Ausgabe gibt zwar die Postleitzahlen aus aber mein Problem liegt darin die Postleitzahl mit 7 auszugrenzen.
Auf diesem Link befindet sich die Aufgabe und die XML Datei ist auch aufm Bild zu sehen. http://imgur.com/4G3xHVG
Mit freundlichen Grüßen
Yogisda
Ich brauche eure Hilfe, ich arbeite gerade an meinen Abgaben für die FH und bin an dieser Stelle hängen geblieben.
Das ist der Code:
#!/bin/bash
# Es wird nach den Postleitzahlen mit 8
# gesucht
echo "Treffer: "
# Listeninhalt ist Ergebnis einen Kommandos
grepliste=$(egrep -o "plz=$|[0-9]{3,5}" personen.xml -nm5)
# $liste[*] liefert einfach den kompletten
# Inhalt der Liste
for erg in ${grepliste[*]}
do
echo $erg
done
Diese Ausgabe gibt zwar die Postleitzahlen aus aber mein Problem liegt darin die Postleitzahl mit 7 auszugrenzen.
Auf diesem Link befindet sich die Aufgabe und die XML Datei ist auch aufm Bild zu sehen. http://imgur.com/4G3xHVG
Mit freundlichen Grüßen
Yogisda
Re: Grep Befehl
hallo
warum nich noch mal grepen, bei mir funktionierts.
ciao
warum nich noch mal grepen, bei mir funktionierts.
edit: sehe gerade die Ausgabe muss mit PLZ1: usw. beginnenYogisda hat geschrieben:Guten Abend liebe Community,
Ich brauche eure Hilfe, ich arbeite gerade an meinen Abgaben für die FH und bin an dieser Stelle hängen geblieben.
Das ist der Code:
#!/bin/bash
# Es wird nach den Postleitzahlen mit 8
# gesucht
echo "Treffer: "
# Listeninhalt ist Ergebnis einen Kommandos
grepliste=$(egrep -o "plz=$|[0-9]{3,5}" personen.xml -nm5)
# $liste[*] liefert einfach den kompletten
# Inhalt der Liste
for erg in ${grepliste[*]}
do
echo $erg | grep 8[0-9]
done
Diese Ausgabe gibt zwar die Postleitzahlen aus aber mein Problem liegt darin die Postleitzahl mit 7 auszugrenzen.
Auf diesem Link befindet sich die Aufgabe und die XML Datei ist auch aufm Bild zu sehen. http://imgur.com/4G3xHVG
Mit freundlichen Grüßen
Yogisda
ciao
Zuletzt geändert von ohnex am 15.01.2015 00:55:13, insgesamt 1-mal geändert.
Re: Grep Befehl
Die 5. Zeile gilt aber immer noch als Treffer und die muss ausgegrenzt werden.
Hier ist die Ausgabe: http://imgur.com/VXWMXMe
Edit: Hab grad die [0-9] dazu getan dann hats geklappt vielen Dank
Edit2: Ja vielleicht muss hier noch bei "plz=$ | [0-9]{3,5}"
plz=$ | [0-9][a-z]{3,5}
Hier ist die Ausgabe: http://imgur.com/VXWMXMe
Edit: Hab grad die [0-9] dazu getan dann hats geklappt vielen Dank
Edit2: Ja vielleicht muss hier noch bei "plz=$ | [0-9]{3,5}"
plz=$ | [0-9][a-z]{3,5}
-
- Beiträge: 287
- Registriert: 05.02.2013 19:47:41
Re: Grep Befehl
1.
2.
volle Punktzahl
Code: Alles auswählen
echo Treffer:;j=;for i in `grep -oE '8[0-9]{4}' file`;do ((++j));echo PLZ$j: $i;done
Code: Alles auswählen
echo Treffer:;j=;for i in `grep -oE '8[0-9]{4}' file`;do ((i > 87000))&&((++j))&&echo PLZ$j: $i;done
-der_linux_cowboy --- Besser werden! ... f*** w$$
- Inkodiktus
- Beiträge: 702
- Registriert: 15.08.2013 01:15:35
- Lizenz eigener Beiträge: GNU General Public License
- Wohnort: » host@user╺─╸[~]
Re: Grep Befehl
Jetzt für die Bash Lernwilligen das ganze büüüde büüüde ausführlich erklären.linuxCowboy hat geschrieben:1.2.Code: Alles auswählen
echo Treffer:;j=;for i in `grep -oE '8[0-9]{4}' file`;do ((++j));echo PLZ$j: $i;done
volle PunktzahlCode: Alles auswählen
echo Treffer:;j=;for i in `grep -oE '8[0-9]{4}' file`;do ((i > 87000))&&((++j))&&echo PLZ$j: $i;done
Vor allem die Option -o kenn ich nicht.
Wenn ich mal kurz den Beitrag kappern darf
Diesen Spruch klebe ichs mir glaub in die Sig rein
Meine Sprachkenntnisse: nur deutsch
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)
Mein Laptop: http://www.asus.com/Notebooks_Ultrabook ... ifications
Mein Debian: Stable + OpenBox
Mein Editor: Emacs
Meine Devise: Frei bleiben - so lange wie es geht : -)
- Livingston
- Beiträge: 1816
- Registriert: 04.02.2007 22:52:25
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 127.0.0.1
Re: Grep Befehl
Irgendwann wirst Du es selbst hinkriegen:Inkodiktus hat geschrieben: Jetzt für die Bash Lernwilligen das ganze büüüde büüüde ausführlich erklären.
Vor allem die Option -o kenn ich nicht.
man grep hat geschrieben: -o, --only-matching
Anstatt der gesamten Zeile werden nur die passenden (nicht
leeren) Teile ausgegeben. Jeder dieser Teile wird auf einer
eigenen Zeile ausgegeben.
Re: Grep Befehl
@Yogisda:
Bitte mal das XML-Original (also in ASCII, z.B. NoPaste) posten. Danke.Hätte gar nicht gedacht, dass nach sich in der Informatik mit Bash-Programmierung auseinandersetzt. Die Screenshots sehen im übrigen irgendwie nach Ubuntu aus Und echte Informatiker nutzen natürlich nicht Virtualbox sondern Debian nativ
@linuxCowboy:
Verstanden habe die Programme leider nicht. Aber volle Punkte würde ich nicht geben. Mir scheint es so, dass nicht nach dem XML-Tag "plz" gesucht wurde. Bei einer Abweichung von der Struktur (z.B. "nachname" und "plz" vertauscht, "nachname" beginnt mit "8" ) könnte ich mir Fehler vorstellen. Die sollte man noch eleminieren.
Bitte mal das XML-Original (also in ASCII, z.B. NoPaste) posten. Danke.Hätte gar nicht gedacht, dass nach sich in der Informatik mit Bash-Programmierung auseinandersetzt. Die Screenshots sehen im übrigen irgendwie nach Ubuntu aus Und echte Informatiker nutzen natürlich nicht Virtualbox sondern Debian nativ
@linuxCowboy:
Verstanden habe die Programme leider nicht. Aber volle Punkte würde ich nicht geben. Mir scheint es so, dass nicht nach dem XML-Tag "plz" gesucht wurde. Bei einer Abweichung von der Struktur (z.B. "nachname" und "plz" vertauscht, "nachname" beginnt mit "8" ) könnte ich mir Fehler vorstellen. Die sollte man noch eleminieren.
Re: Grep Befehl
Ich würde mich eher daran reiben, dass Terminalausgaben überhaupt als Screenshots gepostet werden.uname hat geschrieben:Die Screenshots sehen im übrigen irgendwie nach Ubuntu aus Und echte Informatiker nutzen natürlich nicht Virtualbox sondern Debian nativ
Man könnte einfach das grep-Kommando um den plz-Teil erweitern und hinterher das "plz" wieder wegschneiden (ungetestet):uname hat geschrieben:Mir scheint es so, dass nicht nach dem XML-Tag "plz" gesucht wurde. Bei einer Abweichung von der Struktur (z.B. "nachname" und "plz" vertauscht, "nachname" beginnt mit "8" ) könnte ich mir Fehler vorstellen. Die sollte man noch eleminieren.
Code: Alles auswählen
echo Treffer:;j=;for i in `grep -oE 'plz="8[0-9]{4}' file | grep -oE '[0-9]{5}'`;do ((++j));echo PLZ$j: $i;done
@Yogsida:
Ein paar Infos zu deinem Kenntnisstand bzw. dem Fortschrit deines Kurses wären interessant. Die Forderung nach einer Schleifenkonstruktion macht nämlich die Aufgabe unnötig kompliziert, könnte aber auf eurem Kenntnisstand nötig sein.
Re: Grep Befehl
Du benutzt grep für xml? Mach das bitte nicht .
Nimm xmlstarlet oder sonstige Dinge, die für sowas geeignet sind .
Nimm xmlstarlet oder sonstige Dinge, die für sowas geeignet sind .
Re: Grep Befehl
Mal ohne Schleife als "awk". Kann man bestimmt schöner schreiben. Aber "awk" für XML ist auch nicht toll.
file (evtl. Abtippfehler inkl.)
Code: Alles auswählen
awk -F'plz="' '{p=substr($2,0,5);if (p>=80000) {print p}}' file
awk -F'plz="' '{p=substr($2,0,5);if (p>=87000) {print p}}' file
Code: Alles auswählen
<?xml version ="1.0" encoding="UTF-8"?>
<Personen>
<Person vorname"Erna21" nachname="Etepetete" plz="86709"/>
<Person vorname"Hugo09" nachname="Etepetete" plz="72458"/>
<Person vorname"James T." nachname="Etepetete" plz="87802"/>
<Person vorname"Montgomery" nachname="Etepetete" plz="88709"/>
<Person vorname"Rudi" nachname="Ruebezahl" plz="87709"/>
</Personen>
Zeigt eben die Windows-Mentalität. Trotz verlangter Bash-Programmierung hat der Entwickler der Aufgaben nicht die Vorteile von ASCII gegenüber Bildern erkannt.Ich würde mich eher daran reiben, dass Terminalausgaben überhaupt als Screenshots gepostet werden.
Re: Grep Befehl
@linuxcowboy: Danke das du dir Zeit genommen hast, ich werde dies mal ausprobieren.
@uname: Mit ASCII haben wir uns noch nicht auseinander gesetzt. Ich muss Sie dir leider hier pasten , das ist die XML Datei.
@hikaru, wir sind nicht fortgeschritten, wir haben erst vor kurzen mit der Shell prog. angefangen, davor haben wir nur einfache Grep-Befehle in der Konsole eingegeben.
@Liffi, ich kann nichts dafür das wir dies mit grep machen, wird so in der Aufgabe verlangt
@uname: Mit ASCII haben wir uns noch nicht auseinander gesetzt. Ich muss Sie dir leider hier pasten , das ist die XML Datei.
Code: Alles auswählen
<?xml version="1.0" encoding="UTF-8"?>
<Personen>
<Person vorname="Erna21" nachname="Etepetete" plz="86709"/>
<Person vorname="Hugo09" nachname="Helmchen" plz="72458"/>
<Person vorname="James T." nachname="Kirk" plz="87802"/>
<Person vorname="Montgomery" nachname="Scott77" plz="88709"/>
<Person vorname="Rudi" nachname="Ruebezahl" plz="87709"/>
</Personen>
@Liffi, ich kann nichts dafür das wir dies mit grep machen, wird so in der Aufgabe verlangt
-
- Beiträge: 287
- Registriert: 05.02.2013 19:47:41
Re: Grep Befehl
Originell!uname hat geschrieben:Code: Alles auswählen
awk -F'plz="' '{p=substr($2,0,5);if (p>=80000) {print p}}' file
Code: Alles auswählen
awk -F'plz="' 'BEGIN{print "Treffer:"}{p=substr($2,0,5);if (p>=87000) {print "PLZ"++i": "p}}' file
-der_linux_cowboy --- Besser werden! ... f*** w$$
Re: Grep Befehl
Danke euch alle für eure Hilfe hat geklappt