첫 번째 문자 위치에 이름이 있는 파일이 있습니다. 모든 이름을 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( ^
)을 사용하면 각 줄의 시작 부분에 한 문자가 있는 항목만 선택됩니다. 그런 다음 첫 번째 필드만 인쇄되고 무시됩니다 =
.