
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]\+'
-o
bedeutet, 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 awk
oder 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 =
.