実際のログファイル:
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(:)に基づいてログファイルを処理することです。
sed '/^ :*$/d' logfile1 > logfile2
(前にスペースがある行を削除してください。)sed '/^: *$/d' logfile2 > logfile3
(後にスペースがある行は削除してください。)存在しない行の削除
:
答え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の同じパターンがより簡単になります。