Script um spezielle Einträge zu entfernen!
-
- Beiträge: 67
- Registriert: 06.10.2002 15:01:34
Script um spezielle Einträge zu entfernen!
Hallo,
folgendes Problem:
Ich habe eine textfile mit dem ich eine Liste mit MAC Adressen und daneben der Port angegeben ist.
Sieht folgendermaßen aus:
....
<MAC-Adresse> INTEGER: 25
<MAC-Adresse> INTEGER: 22
<MAC-Adresse> INTEGER: 23
<MAC-Adresse> INTEGER: 26
....
Ich bräuchte nun ein Script, dass mir jede Zeile entfernt, die den Port 25 enthalt.
Ist sowas möglich?
Wenn ja, wie?
Bin für jede Hilfe dankbar!
Gruß,
Flasher
folgendes Problem:
Ich habe eine textfile mit dem ich eine Liste mit MAC Adressen und daneben der Port angegeben ist.
Sieht folgendermaßen aus:
....
<MAC-Adresse> INTEGER: 25
<MAC-Adresse> INTEGER: 22
<MAC-Adresse> INTEGER: 23
<MAC-Adresse> INTEGER: 26
....
Ich bräuchte nun ein Script, dass mir jede Zeile entfernt, die den Port 25 enthalt.
Ist sowas möglich?
Wenn ja, wie?
Bin für jede Hilfe dankbar!
Gruß,
Flasher
Code: Alles auswählen
root:~# cat x.txt | grep -v "INTEGER: 25"
<MAC-Adresse> INTEGER: 22
<MAC-Adresse> INTEGER: 23
<MAC-Adresse> INTEGER: 26
gms
[edit]
damit keiner lästert (useless use of cat):
Code: Alles auswählen
root:~# grep -v "INTEGER: 25" x.txt
<MAC-Adresse> INTEGER: 22
<MAC-Adresse> INTEGER: 23
<MAC-Adresse> INTEGER: 26
Wenn man jetzt noch die Zeile ala
erweitert hat man das auch alles direkt in einer neuen Datei.
Gruesse
Hendrik
Code: Alles auswählen
grep -v "INTEGER: 25" test.txt > ergebnis.txt
Gruesse
Hendrik
-
- Beiträge: 67
- Registriert: 06.10.2002 15:01:34
Hallo,
Ich habe eure Vorschläge nun eingebaut:
#!/bin/bash
grep -v "INTEGER: 25" mmacadr.cut > mmacadr.wh
Beim Ausführen erhalte ich allerdings folgende Fehlermeldung:
bad interpreter: Datei oder Verzeichnis nicht gefunden
Woran liegt das? Meine Bash liegt unter "/bin/bash"
Jetzt habe ich noch ein weiteres kleines Problem:
Es sollen nicht nur Zeilen mit dem Ausdruck "INTEGER: 25" sondern auch "INTEGER 26"
entfernt werden bzw. nicht in die neue Datei übernommen werden.
Gibt es da eine Art "or-Verknüpfung"?
Danke!
Gruß,
flasher
Ich habe eure Vorschläge nun eingebaut:
#!/bin/bash
grep -v "INTEGER: 25" mmacadr.cut > mmacadr.wh
Beim Ausführen erhalte ich allerdings folgende Fehlermeldung:
bad interpreter: Datei oder Verzeichnis nicht gefunden
Woran liegt das? Meine Bash liegt unter "/bin/bash"
Jetzt habe ich noch ein weiteres kleines Problem:
Es sollen nicht nur Zeilen mit dem Ausdruck "INTEGER: 25" sondern auch "INTEGER 26"
entfernt werden bzw. nicht in die neue Datei übernommen werden.
Gibt es da eine Art "or-Verknüpfung"?
Danke!
Gruß,
flasher
- Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
hi
einfach per befehl und fertsch
die pfade zu den dateien sollten sicherlich stimmen (so wie dort ist der aktuelle pfad auch der wo die dateien stehen)
wenn nein den absoluten pfad der dateien anpassen
einfach per befehl
Code: Alles auswählen
/bin/grep -v 25 mmacadr.cut | grep -v 26 > mmacadr.wh
die pfade zu den dateien sollten sicherlich stimmen (so wie dort ist der aktuelle pfad auch der wo die dateien stehen)
wenn nein den absoluten pfad der dateien anpassen
kann es sein, daß du dein Script in einem Dos/Windows Editor erstellt hast ?
Gruß
gms
Code: Alles auswählen
grep "INTEGER: 2[56]" in.txt >out.txt
Gruß
gms
verstehe leider den Sinn nicht :/Snoopy hat geschrieben:Code: Alles auswählen
/bin/grep -v 25 mmacadr.cut | grep -v 26 > mmacadr.wh
mach mal in deinem script ein
Code: Alles auswählen
#!/bin/bash -v
Gruesse
Hendrik
- Snoopy
- Beiträge: 4297
- Registriert: 17.11.2003 18:26:56
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rh.- Pflz.
hmm was gibts da net zu verstehen ?invertigo hat geschrieben:verstehe leider den Sinn nicht
/bin/grep -v = suche invertiert
25 = nach 25
mmacadr.cut = in der datei mmacadr.cut
| = pipe das ergebnis
grep -v = suche darin invertiert
26 = nach 26
> mmacadr.wh = das ergebnis in die datei mmacadr.wh schreiben
meinst du die erste absolute angabe des grep-befehls ?
kann man auch beim 2. angeben
Code: Alles auswählen
/bin/grep -v 25 mmacadr.cut | /bin/grep -v 26 > mmacadr.wh
sicherlich sollte es auch nach gms lösung gehen...
-
- Beiträge: 67
- Registriert: 06.10.2002 15:01:34
Super
Leider funktioniert, das mit dem #!/bin/bash immer noch nicht!
Das script wurde ursprünglich unter solaris erstellt, ich möchte es jetzt nur unter Linux fertigstellen!
Habe schon wieder die nächste dämliche Frage
Die MAC-Adresse, die zu Beginn jeder Zeile steht ist in dezimaler Form (sehr merkwürdig) angegeben. Diese muss in hexadezimaler Form konvertiert werden.
Ich habe nun schon einen passenden Befehl gefunden, wie ich Dezimalzahlen in Hexzahlen umwandeln kann
Jetzt ist mir allerdings nicht ganz klar wie ich die MAC-Adresse am besten konvertierte:
Folgendermaßen sieht eine Zeile aus:
....
0.14.127.61.78.193 : INTEGER: 2
0.96.176.39.100.104 : INTEGER: 11
0.1.230.35.107.106 : INTEGER: 11
0.1.230.34.10.13 : INTEGER: 12
0.0.239.3.191.64 : INTEGER: 25
....
Habe mir schon überlegt, eine Schleife zu bauen, dir mir die Zahlen 1 - 6 pro Zeile ausliest, in eine Variable schreibt und dann schließlich durch die Dezimalzahl ersetzt. Die 7. Zahl wird übersprungen, weil sie ja den Port darstellt. Und dann wieder die Schleife von Anfang an durchlaufen lassen!
Wäre sowas möglich?
Oder kann man das einfacher realisieren?
Danke!
Gruß,
Flasher
Leider funktioniert, das mit dem #!/bin/bash immer noch nicht!
Das script wurde ursprünglich unter solaris erstellt, ich möchte es jetzt nur unter Linux fertigstellen!
Habe schon wieder die nächste dämliche Frage
Die MAC-Adresse, die zu Beginn jeder Zeile steht ist in dezimaler Form (sehr merkwürdig) angegeben. Diese muss in hexadezimaler Form konvertiert werden.
Ich habe nun schon einen passenden Befehl gefunden, wie ich Dezimalzahlen in Hexzahlen umwandeln kann
Code: Alles auswählen
PMAC=255
HEX1=$(echo "obase=16;$PMAC"|bc)
echo $HEX1
Folgendermaßen sieht eine Zeile aus:
....
0.14.127.61.78.193 : INTEGER: 2
0.96.176.39.100.104 : INTEGER: 11
0.1.230.35.107.106 : INTEGER: 11
0.1.230.34.10.13 : INTEGER: 12
0.0.239.3.191.64 : INTEGER: 25
....
Habe mir schon überlegt, eine Schleife zu bauen, dir mir die Zahlen 1 - 6 pro Zeile ausliest, in eine Variable schreibt und dann schließlich durch die Dezimalzahl ersetzt. Die 7. Zahl wird übersprungen, weil sie ja den Port darstellt. Und dann wieder die Schleife von Anfang an durchlaufen lassen!
Wäre sowas möglich?
Oder kann man das einfacher realisieren?
Danke!
Gruß,
Flasher
Code: Alles auswählen
HEX=$(printf %x.%x.%x.%x.%x.%x $(echo $PMAC|tr . " "))
ein perl oneliner:
Gruß
gms
Code: Alles auswählen
gms@gms1:~$ cat in.txt | perl -ne '@x=split(/\.|: +INTEGER:/); next if $x[6]==25 || $x[6]==26; printf "%02X.%02X.%02X.%02X.%02X.%02X %d\n",@x; ' >out.txt
gms@gms1:~$ cat out.txt
00.0E.7F.3D.4E.C1 2
00.60.B0.27.64.68 11
00.01.E6.23.6B.6A 11
00.01.E6.22.0A.0D 12
gms
-
- Beiträge: 67
- Registriert: 06.10.2002 15:01:34
- Stratovarius
- Beiträge: 297
- Registriert: 07.04.2004 13:00:55
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: 53° 27' 20,31'' N 9° 57' 29,31'' E
-
Kontaktdaten:
3x O'Reilly:
"Einführung in Perl" - ISBN: 3-89721-147-5
"Perl" - ISBN: 3-89721-144-0
"Perl Kochbuch" - ISBN: 3-89721-366-4
Nicht ganz billig, aber feine Lektüre. Ich schwöre auf O'Reilly
Für die Bash ist die Linuxfibel und ein kleiner Bash-Grundkurs evtl. interessant. Scripting ist da auch ein Thema.
mfg
Stratovarius
"Einführung in Perl" - ISBN: 3-89721-147-5
"Perl" - ISBN: 3-89721-144-0
"Perl Kochbuch" - ISBN: 3-89721-366-4
Nicht ganz billig, aber feine Lektüre. Ich schwöre auf O'Reilly
Für die Bash ist die Linuxfibel und ein kleiner Bash-Grundkurs evtl. interessant. Scripting ist da auch ein Thema.
mfg
Stratovarius