col(:) 기반 로그 파일의 UNIX 텍스트 처리

col(:) 기반 로그 파일의 UNIX 텍스트 처리

실제 로그 파일:

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

xyz:5:90:34:89:22:07

abbc1:6:346:78:89:100:01

ERROR:
ORA-01033: ORACLE initialization or shutdown in progress
Process ID: 0
Session ID: 0 Serial number: 0

abbc1:6:346:78:89:100:01

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
SP2-0157: unable to CONNECT to ORACLE after 3 attempts, exiting SQL*Plus

xyz:5:90:34:89:22:07

abbc1:6:346:78:89:100:01

v-gz1:999:39:56:23:101:123

ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor

v-gz1:999:39:56:23:101:123

원하는 출력:

xyz:5:90:34:89:22:07

abbc1:6:346:78:89:100:01

abbc1:6:346:78:89:100:01

xyz:5:90:34:89:22:07

abbc1:6:346:78:89:100:01

v-gz1:999:39:56:23:101:123

v-gz1:999:39:56:23:101:123

내가 찾고 있는 것은 coln(:)을 기반으로 로그 파일을 처리하는 것입니다.

  1. sed '/^ :*$/d' logfile1 > logfile2(앞에 공백이 있는 줄을 제거하세요.)

  2. sed '/^: *$/d' logfile2 > logfile3(뒤에 공백이 있는 줄은 삭제하세요.)

  3. 존재하지 않는 행 삭제:

답변1

grep -v " " $IN | grep -P ":.*:"

답변2

모든 유효한 줄에는 콜론과 그 뒤에 10진수가 있는 것 같습니다. 또한 하이픈을 포함하여 소문자 영숫자 문자열로 시작합니다. 그래서 당신의 정규식은

^[a-z0-9-]+[0-9]

출력의 각 출력 줄 뒤에는 빈 줄이 있습니다. 그것이 정말로 원하는 것이라면 sed를 사용하십시오.

sed -Ene '/^a-z0-9-]+:[0-9]/ s/$/\n/p' filename

이중 개행 문자가 필요하지 않으면 grep의 동일한 패턴이 더 간단해질 것입니다.

답변3

그것은

<input | grep -oP '(.+?:){6}.+'

정규 표현식은 다음과 같습니다.https://regex101.com/r/EO1yhi/1

관련 정보