Datei dursuchen und ein String dem Ergebnis voranstellen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
marcjool
Beiträge: 3
Registriert: 01.11.2012 15:26:22

Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von marcjool » 01.11.2012 15:45:00

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

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von hikaru » 01.11.2012 15:58:13

Eine Möglichkeit:

Code: Alles auswählen

egrep -v '(ABC|XYZ)' Datei | sed -s 's/^/Ausgabe: /'

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von Cae » 01.11.2012 16:03:13

awk?

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
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
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

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von hikaru » 01.11.2012 16:15:26

Jetzt müssen wir erstmal klären was das hier genau bedeutet:
marcjool hat geschrieben:weder ABC noch XYZ enthalten
Was bedeutet hier "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
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.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von Cae » 01.11.2012 16:21:23

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
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

marcjool
Beiträge: 3
Registriert: 01.11.2012 15:26:22

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von marcjool » 01.11.2012 16:22:53

Danke an alle für die schnelle Hilfe. :THX:

Gruß
Marc

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von hikaru » 01.11.2012 16:31:04

Nur mal so aus Interesse:
Haben wir gerade deine Hausaufgaben für dich gemacht? :roll:

marcjool
Beiträge: 3
Registriert: 01.11.2012 15:26:22

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von marcjool » 01.11.2012 17:22:20

hikaru hat geschrieben:Nur mal so aus Interesse:
Haben wir gerade deine Hausaufgaben für dich gemacht? :roll:
Aus dem Hausaufgabenalter bin ich schon ein paar Jahrzehnte raus. :wink:

schwedenmann
Beiträge: 5619
Registriert: 30.12.2004 15:31:07
Wohnort: Wegberg

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von schwedenmann » 07.11.2012 11:24:08

Hallo

Nur so aus Interesse, wie würde man sowas in Python lösen ? (alles außer ABC + XYZ ausgeben).

mfg
schwedenmann

Liffi
Beiträge: 2345
Registriert: 02.10.2004 01:33:05

Re: Datei dursuchen und ein String dem Ergebnis voranstellen

Beitrag von Liffi » 07.11.2012 14:04:09

schwedenmann hat geschrieben: Nur so aus Interesse, wie würde man sowas in Python lösen ? (alles außer ABC + XYZ ausgeben).
Hierbei stehen die Zeilen in einer Datei 'input':

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,
EDIT:: python 2.x

Antworten