Фильтровать имена из текстового файла

Фильтровать имена из текстового файла

У меня есть файл, в котором имена находятся в первой позиции символа. Я пытаюсь найти способ grep всех имен. Например, я хотел бы, чтобы имена BUBBA и SUSAN были перечислены.

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

решение1

Похоже, вы просто хотите:

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

-oозначает вывод только совпадающей части строки, а регулярное выражение сопоставляет последовательность из одной или нескольких заглавных букв в начале строки.

Вы также можете сделать то же самое с помощью sed, что слишком сложно для этого примера, но полезно (и проще, чем awkили perl), если вам нужно выполнить более сложное сопоставление или преобразование:

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

решение2

С использованием awk:

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

Печатать только строки, содержащие хотя бы одно поле ( NF > 1), и игнорировать строки, начинающиеся с (или ): ^\(|\).

решение3

Если все входные файлы отформатированы одинаково, то для простого решения awk:

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

Использование carrat ( ^) выберет только записи, которые имеют символ в начале каждой строки. Затем выведет только первое поле, игнорируя =.

Связанный контент