Namen aus Textdatei filtern

Namen aus Textdatei filtern

Ich habe eine Datei, in der an der ersten Stelle des Zeichens Namen stehen. Ich versuche, einen Weg zu finden, alle Namen zu durchsuchen. Hier möchte ich beispielsweise die Namen BUBBA und SUSAN aufgelistet haben.

BUBBA =

 (DESCRIPTION =
 (ADDRESS_LIST =
  (ADDRESS = (PROTOCOL = TCP)(HOST = bubba01)(PORT = xxxx))
  )
  (CONNECT_DATA =
  (SERVICE_NAME = bubba01)
  )
 )

SUSAN =

 (DESCRIPTION =
  (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = susan01)(PORT = xxxx))
   )
   (CONNECT_DATA =
     (SID = susandb)
   )
  )

Antwort1

Es sieht so aus, als ob Sie nur Folgendes möchten:

grep -o '^[A-Z]\+'

-obedeutet, dass nur der übereinstimmende Teil der Zeile ausgegeben wird und der reguläre Ausdruck mit einer Folge von einem oder mehreren Großbuchstaben am Anfang einer Zeile übereinstimmt.

Sie können dies auch mit tun sed, was für dieses Beispiel zu kompliziert ist, aber nützlich (und einfacher als awkoder perl), wenn Sie komplexere Übereinstimmungen oder Transformationen durchführen müssen:

sed -n '/^[A-Z]\+/{s/^\([A-Z]\+\).*/\1/;p}'

Antwort2

Verwendung von awk:

awk 'NF > 1 && $1 !~ /^\(|\)/ {print $1}' file

Drucken Sie nur Zeilen mit mindestens einem Feld ( NF > 1) und ignorieren Sie Zeilen, die mit (oder ): beginnen ^\(|\).

Antwort3

Wenn alle Eingabedateien das gleiche Format haben, gilt für eine einfache awk-Lösung:

awk '/^[a-Z]/ {print $1}' filename

Mit dem Zirkelzeichen ( ^) werden nur Einträge ausgewählt, die am Anfang jeder Zeile ein Zeichen haben. Dann wird nur das erste Feld gedruckt und das ignoriert =.

verwandte Informationen