Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Mit grep und regulärem Ausdruck zeilen Ausgeben mit bestimmten Zeichenmuster

Frage Linux

Mitglied: FISI-Azubi2010

FISI-Azubi2010 (Level 1) - Jetzt verbinden

21.04.2009, aktualisiert 11:28 Uhr, 10643 Aufrufe, 11 Kommentare

Dieser Beitrag beschäftigt sich mit einem regulären Ausdruck zum finden bestimmter Zeichenmuster innerhalb einer Datei auf einem Unix-System. Hierzu wird der Befehl grep verwendet

Hallo Admingemeinde,

zur Zeit bin ich in einer Abteilung die sich stark mit Unix und dessen Derivaten beschäftigt. Damit ich Unix Fit gemacht werde soll ich einige Aufgaben lösen was bisher auch ganz gut geklappt hat. Nun bin ich an einer Aufgabe wo weder Manpages, die Kollegen um mich rum oder mehrere Suchanfragen bei meinem Freund Google helfen können. Wir sitzen zu dritt seit Stunden an dieser Aufgabe. Deshalb wende ich mich ich mich hier an dieses Forum. Wie der Titel schon sagt geht es um Zeichenmuster das mit grep und regulärem Ausdruck aus einer Datei gelesen werden soll.

Die Situation und Aufgabenstellung etwas genauer Erörtert:

- Es existiert eine Datei die mit Vornamen gefüllt ist
- 2 Azubis und ein ausgelernter FISI denen nichts mehr einfällt und der jenige ders könnte ist die nächsten 3Wochen nicht da

Die Aufgabe lautet nun die Vornamen auszugeben:

- die das Zeichen "a" und "b" in Groß- Kleinschreibung enthalten

also

z.B A oder B am Anfang und ein "a" und ein"b" irgentwo im weiteren verlauf der Zeile

Barbara oder Abdelbahi wären z.B. solche Strings


Was haben wir z.B versucht:

grep -E "[AB] [ab]" Dateiname

Vieleicht hat hier jemand einen Ausdruck der diese Kriterien erfüllt oder kann uns auf den richtigen Weg bringen.

Danke im voraus und Gruß

FISI-AZUBI2010
Mitglied: godlie
21.04.2009 um 12:11 Uhr
Hallo

01.
grep [abAB] test.txt
sucht nach a,b,A,B in der Datei oder hab ich an der Aufgabenstellung was aflsch ausgelegt
Bitte warten ..
Mitglied: FISI-Azubi2010
21.04.2009 um 12:27 Uhr
Hi godlie,

Danke für deine Antwort aber diese Zeile würde alle ausgeben die am Anfang mit a A oder b B beginnen.

Das ist aber nur eins der in der Aufgabenstellung geforderten Kriterien.

Es soll nach dem Anfangsbuchstaben irgentwo im Verlauf der Zeile noch mal ein a und auch irgentwo ein b stehen.


Diese Aufgabe macht mich noch wahnsinnig das ist richtig was zum Knobeln

Ich hab auch schon versucht das ganze mit Pipes zu realisieren da man ja mit Pipes immer ne UND-Bedingung hinbekommt aber selbst damit ists noch kompliziert
Bitte warten ..
Mitglied: godlie
21.04.2009 um 12:37 Uhr
Also:

01.
grep ^A.*a sucht alles was A am Anfang hat und ein a enthält 
02.
grep ^B.*b sucht alles was B am Anfang hat und ein b enthält.
wie wärs mit der Lösung
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 12:38 Uhr
Es gibt im internet eine ganze Menge Hilfe-Seiten rund um Regular Expressions.
Leider gibt es auch einige verschiedene Dialekte.

Grundsätzlich gibt es die Anker "^" für den Zeilenanfang und "$" fürs Zeilenende.
Der Punkt steht für ein beliebiges Zeichen und der Asterisk * für eine beliebige Anzahl des vorherigen Elements.

Wenn Ihr also pro Zeile nur einen Namen habt, ist das Ganze recht einfach.

Gruß
LotPings
Bitte warten ..
Mitglied: godlie
21.04.2009 um 12:59 Uhr
Sodala jetzt ist das ding fertig.

01.
grep -E "^A.+a|^B.+b" test.txt
Aber darauf könnte man kommen wenn man mal in eine man page von grep oder egrep reinschaut.
Dort sind nämlich die Regular Expressions kurz erklärt.

edit:
Achja das ganze hat mit Kaffeetrinken nicht mal 30minuten gedauert.
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 13:15 Uhr
Hallo godie,

dann hat aber das Kaffee trinken zuviel Anteil gehabt

deine RegExp findet z.Bspw nicht den Aaron oder die Bertha.

Immer noch von einem Namen ohne Leerzeichen pro Zeile ausgehend
grep -E "^[AB].*[ab].*$" test.txt
Aber das haben Die OPs inzwische bestimmt selber herausgefunden.
Bitte warten ..
Mitglied: godlie
21.04.2009 um 13:25 Uhr
Hm da war dann doch ncoh ein Denkfehler
Bitte warten ..
Mitglied: FISI-Azubi2010
21.04.2009 um 15:38 Uhr
Hi und danke für die Antworten,

wir haben jetzt das ganze über mehrere Pipes gelöst ist zwar nicht schön aber es funktioniert erstmal. ; )
Dennoch wäre es cool zu wissen wie man das als regular expression macht.

Gruß FISI-AZUBI2010
Bitte warten ..
Mitglied: FISI-Azubi2010
21.04.2009 um 15:57 Uhr
Zitat von LotPings:
Hallo godie,

dann hat aber das Kaffee trinken zuviel Anteil gehabt

deine RegExp findet z.Bspw nicht den Aaron oder die Bertha.

Immer noch von einem Namen ohne Leerzeichen pro Zeile ausgehend
> grep -E "^[AB].*[ab].*$" test.txt 
> 
Aber das haben Die OPs inzwische bestimmt selber herausgefunden.

ähm Aaron und Bertha entsprechen ebenfalls nicht den Kriterien da sie "b" im weiteren verlauf der Zeile nicht haben

Es muss am Anfang ein A oder ein B sein und dann im verlauf ein "a" und ein "b"
Bitte warten ..
Mitglied: LotPings
21.04.2009 um 16:39 Uhr
Zitat von FISI-Azubi2010:
ähm Aaron und Bertha entsprechen ebenfalls nicht den Kriterien
da sie "b" im weiteren verlauf der Zeile nicht haben

Es muss am Anfang ein A oder ein B sein und dann im verlauf ein
"a" und ein "b"


Jaja, immer diese Schlauberger die selber nicht richtig lesen können

c:\>type Namensliste.txt 
Abraham 
Barbara 
Abdelbahi 
Aaron 
Beathe 
Bertha 
Rainer 
Sigismund 
Habakuk 
 
c:\>grep -E "^[AB].*((a.*b)|(b.*a)).*$" Namensliste.txt 
Abraham 
Barbara 
Abdelbahi
Bei meinem Grep (WindowsPort) funktioniert das so.

Gruß
Bitte warten ..
Mitglied: FISI-Azubi2010
23.04.2009 um 13:17 Uhr
Hi Lotpings,

dein Ausdruck funktiniert danke
So Problem gelöst.

Die Lösung ist grep -E "^[AB].*((a.*b)|(b.*a)).*$" Dateiname
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...

Microsoft Office
Keine Updates für Office 2016 (11)

Frage von Motte990 zum Thema Microsoft Office ...