Datei dursuchen und ein String dem Ergebnis voranstellen
Datei dursuchen und ein String dem Ergebnis voranstellen
Hallo zusammen,
ich habe folgende Problemstellung.
Ich habe eine Datei die folgende Zeilen enthält.
BAUM
ABC
STRAUCH
XYZ
HECKE
Es sollen alle Zeilen, die weder ABC noch XYZ enthalten, ausgegeben werden und
den gefundenen Zeilen soll noch der String Ausgabe: vorangestellt werden.
Sodass die Ausgabe folgendermaßen aussieht:
Ausgabe: BAUM
Ausgabe: STRAUCH
Ausgabe: HECKE
Lässt sich das Problem einfach via Shell Script lösen?
Vielen Dank im Voraus für eure Antworten.
Gruß Marc
ich habe folgende Problemstellung.
Ich habe eine Datei die folgende Zeilen enthält.
BAUM
ABC
STRAUCH
XYZ
HECKE
Es sollen alle Zeilen, die weder ABC noch XYZ enthalten, ausgegeben werden und
den gefundenen Zeilen soll noch der String Ausgabe: vorangestellt werden.
Sodass die Ausgabe folgendermaßen aussieht:
Ausgabe: BAUM
Ausgabe: STRAUCH
Ausgabe: HECKE
Lässt sich das Problem einfach via Shell Script lösen?
Vielen Dank im Voraus für eure Antworten.
Gruß Marc
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Eine Möglichkeit:
Code: Alles auswählen
egrep -v '(ABC|XYZ)' Datei | sed -s 's/^/Ausgabe: /'
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
awk?a und b sind die beiden auszufilternden Worte, den printf…|-Teil kannst du weglassen und die Daten durch ein angehängtes <myfile einpflegen.
Gruß Cae
Code: Alles auswählen
% printf 'banane\na\napfel\nfnord\nb\nbirne\n'|awk '($1!~/^a$/)&&($1!~/^b$/){print"Ausgabe: " $0}'
Ausgabe: banane
Ausgabe: apfel
Ausgabe: fnord
Ausgabe: birne
Gruß 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: Datei dursuchen und ein String dem Ergebnis voranstellen
Jetzt müssen wir erstmal klären was das hier genau bedeutet:
Es gibt also Zeilen in denen ABC oder XYZ steht. Kann in den Zeilen noch was anderes stehen so dass die Zeilen z.B. so aussehen?:
Falls nein, dann ist es egal. Falls doch, was soll mit der Zeile passieren?
Soll sie in der Ausgabe drin bleiben weil es ja nicht genau ABC bzw. XYZ ist? Dann passt meine Lösung nicht. Soll sie rausfliegen weil ABC bzw. XYZ neben anderem Zeug in der Zeile zu finden ist, dann passt Cae's Lösung nicht.
Beide Lösungen ließen sich natürlich durch Anpassen der Regulären Ausdrücke in ihrer Wirkung vertauschen.
Was bedeutet hier "enthalten"?marcjool hat geschrieben:weder ABC noch XYZ enthalten
Es gibt also Zeilen in denen ABC oder XYZ steht. Kann in den Zeilen noch was anderes stehen so dass die Zeilen z.B. so aussehen?:
Code: Alles auswählen
ABCDEF
XYZ123
Soll sie in der Ausgabe drin bleiben weil es ja nicht genau ABC bzw. XYZ ist? Dann passt meine Lösung nicht. Soll sie rausfliegen weil ABC bzw. XYZ neben anderem Zeug in der Zeile zu finden ist, dann passt Cae's Lösung nicht.
Beide Lösungen ließen sich natürlich durch Anpassen der Regulären Ausdrücke in ihrer Wirkung vertauschen.
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Man muss je nach Interpretation die RegEx umbauen. Bei meiner Version wird grundsätzlich die komplette Zeile überprüft, ob sie a oder b lautet, und in diesem Fall unterdrückt. Falls das unerwünscht ist, kann man den Ausdruck /^a$/ ("finde den Zeilenanfang, unmittelbar danach das Zeichen a und sofort das Zeilenende") durch /a/ ("finde irgendwo ein a") ersetzen. (Und entsprechend für b.)
Das sollte beim egrep -v auch gehen, jeweils außerhalb der Klammer.
Gruß Cae
--Edit: doppeltes Verb durch Hilfsverb ersetzt
Das sollte beim egrep -v auch gehen, jeweils außerhalb der Klammer.
Gruß Cae
--Edit: doppeltes Verb durch Hilfsverb ersetzt
Zuletzt geändert von Cae am 01.11.2012 16:25:50, insgesamt 1-mal geändert.
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: Datei dursuchen und ein String dem Ergebnis voranstellen
Danke an alle für die schnelle Hilfe.
Gruß
Marc
Gruß
Marc
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Nur mal so aus Interesse:
Haben wir gerade deine Hausaufgaben für dich gemacht?
Haben wir gerade deine Hausaufgaben für dich gemacht?
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Aus dem Hausaufgabenalter bin ich schon ein paar Jahrzehnte raus.hikaru hat geschrieben:Nur mal so aus Interesse:
Haben wir gerade deine Hausaufgaben für dich gemacht?
-
- Beiträge: 5619
- Registriert: 30.12.2004 15:31:07
- Wohnort: Wegberg
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Hallo
Nur so aus Interesse, wie würde man sowas in Python lösen ? (alles außer ABC + XYZ ausgeben).
mfg
schwedenmann
Nur so aus Interesse, wie würde man sowas in Python lösen ? (alles außer ABC + XYZ ausgeben).
mfg
schwedenmann
Re: Datei dursuchen und ein String dem Ergebnis voranstellen
Hierbei stehen die Zeilen in einer Datei 'input':schwedenmann hat geschrieben: Nur so aus Interesse, wie würde man sowas in Python lösen ? (alles außer ABC + XYZ ausgeben).
Code: Alles auswählen
#!/usr/bin/python
import re
with open('input') as f:
for line in f:
if not re.match('(ABC|XYZ)', line):
print line,