Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Arbeiten mit 'grep' (https://www.delphipraxis.net/27912-arbeiten-mit-grep.html)

barnti 17. Aug 2004 12:26


Arbeiten mit 'grep'
 
Hi,
ich versuche grade mit 'grep' nach einer Textpassage zu suchen. Dabei würde ich gern Sonderzeichen berücksichtigen. Beispiel:
Ausgabe der Zeile des Dienstes mit der Nummer '1'.

Dafür muss ich alle Zeilen in der eine '1' vorkommt aussuchen denen gleichzeitig ein Leer- oder Tabulator-Zeichen voransteht.
Wie binde ich diese Sonderzeichen ein?

Mein Versuch:
grep [:blank:]1/ /etc/services

Leider passiert nichts. Das Kommando wird ohne Ergebnisse ausgeführt. Kann jemand helfen?

Blutiger Anfänger 21. Aug 2004 23:45

Re: Arbeiten mit 'grep'
 
grep -f " 1" /etc/...

Bei mir funktionierten die Perl-kompatiblen RegExes nicht.
Obiges gilt für das GNU-Style-GREP. Für das Borland-GREP keine Ahnung. Falls du Delphi installiert hast, kann es sein, daß das Delphi-GREP sich vordrängelt. (Ich gehe mal wg. Delphi von Win32 mit Cygwin o.ä. aus)

barnti 23. Aug 2004 07:27

Re: Arbeiten mit 'grep'
 
Hi,

ich meinte das 'grep' unter linux. So geht es jedenfalls nicht, denn dann werden nur Einträge mit vorangestelltem Leerzeichen gefunden. Fast richtig aber nur 'fast'...;)

fluxury 23. Aug 2004 07:43

Re: Arbeiten mit 'grep'
 
Hi Barnti,
probier das hier mal aus grep "[Leerzeichen,Tab]1" /etc/services

damit hat es bei mir geklappt

Leerzeichen und Tab nicht als Wörter in der grep Maske verwenden

Mfg

fluxury

barnti 23. Aug 2004 07:58

Re: Arbeiten mit 'grep'
 
Hallo,
daraufhin bekomme ich folgende Meldung:

Updated from RFC 1700, ``Assigned Numbers'' (October 1994). Not all ports
The Well Known Ports are those from 0 through 1023.


Kann jemand damit etwas anfangen?

fiasko 23. Aug 2004 08:12

Re: Arbeiten mit 'grep'
 
Zitat:

Zitat von barnti
Kann jemand damit etwas anfangen?

Ja, er sucht nicht nach deinem Tab, sondern nur nach Leerzeichen. Die Dienste stehen aber alle Tab-getrennt drinne...

fiasko 23. Aug 2004 08:16

Re: Arbeiten mit 'grep'
 
Gehen müßte folgende Variante:

Code:
grep "[[:space:]]1" /etc/services

barnti 23. Aug 2004 08:29

Re: Arbeiten mit 'grep'
 
Hi

Nope:
grep: Invalid character class name

fluxury 23. Aug 2004 08:42

Re: Arbeiten mit 'grep'
 
Was für ein Unix hast du ??

barnti 23. Aug 2004 08:46

Re: Arbeiten mit 'grep'
 
Hi,

auf der Kiste läuft 'IPCop'. So weit ich es weiß ist das auf RedHat aufgesetzt.

Blutiger Anfänger 23. Aug 2004 13:47

Re: Arbeiten mit 'grep'
 
grep -P "\s*1" /etc/....

??? Geht das ???

fiasko 23. Aug 2004 13:52

Re: Arbeiten mit 'grep'
 
Zitat:

Zitat von Blutiger Anfänger
grep -P "\s*1" /etc/....

??? Geht das ???

Nee, wenn dann "\\s1" - grep macht aber keine Perl RegExs.


@barnti:

dann nimm mal statt grep "egrep" bzw. "grep -E" um erweiterte Regexs einzuschalten.

barnti 23. Aug 2004 13:57

Re: Arbeiten mit 'grep'
 
Hi,
damit hatte ich auch noch keinen Erfolg...Selbe Fehlermeldungen, selbe Ergebnisse...

Blutiger Anfänger 23. Aug 2004 14:04

Re: Arbeiten mit 'grep'
 
Andere Idee. Mit den meisten Perl-Distros kommt ein Beispiel welches GREP in Perl implementiert. Bzw du kannst das IMO auch im Web finden. Du kannst dann die normale Perl-RegEx benutzen. Und damit kenne ich mich besser aus :-D - könnte also auch besser helfen.

Das schlimme an den RegExes ist ja, daß es so viele verschiedene Geschmacksrichtungen gibt.

Ich guck mal, so'n Perskript mit GREP-Fähigkeiten ist popelig kurz und kann dennoch die Zeilen ausgeben (wenn vielleicht auch nicht alle GREP-Modi nachvollziehen).

barnti 23. Aug 2004 14:05

Re: Arbeiten mit 'grep'
 
Na,
ich werde mal weiter versuchen. Es muss ja irgendwie gehen...

Blutiger Anfänger 23. Aug 2004 14:27

Re: Arbeiten mit 'grep'
 
Willst du vielleicht das?:

Code:
grep "[[:space:]]1\/" /etc/services
... du willst doch "nur" den Dienst an Port 1. Also mußt du so eingrenzen:

[Space/Tab] [Eins] [Forward Slash]

Wahlweise ginge auch:
Code:
grep "[[:space:]]1\/tcp" /etc/services
um nur den TCP-Port zu bekommen.

Funzt auf einem Mandrake-System ohne Probleme.

Nachtrag: Das ist, wohlgemerkt, nur die modifizierte Variante von Thomas' (fiasko) Vorschlag.

fiasko 23. Aug 2004 16:39

Re: Arbeiten mit 'grep'
 
Sein Problem ist ja das sein grep den Regex nicht frißt.

Also wenn er nur den Service Namen haben will gibt es ja extra die libc-Calls getservbyname und getservbyport. Wenn man nicht extra ein C-Proggy schreiben will tut es auch folgendes:

Code:
thomas@server:~$ perl -e 'print scalar getservbyname("ssh","tcp"),"\n";'
22
thomas@server:~$ perl -e 'print scalar getservbyport(22,'tcp'),"\n";'
ssh


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:55 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz