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

関連情報