텍스트 파일에서 이름 필터링

텍스트 파일에서 이름 필터링

첫 번째 문자 위치에 이름이 있는 파일이 있습니다. 모든 이름을 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

캐럿( ^)을 사용하면 각 줄의 시작 부분에 문자가 있는 항목만 선택됩니다. 그런 다음 =.

관련 정보