大容量ログファイルの場合、「成功」ではないか「ok」で終わらない行をどのように表示できますか?
答え1
以下を含む行を削除してください。誰でも文字列、特にgrep:
Jordanのコメントによると、1つのコマンドで次のようになります。
grep -Ev 'success|ok$'
または:
grep -ve success -e 'ok$'
または:
grep -v 'success ok$'
両方のコマンドで:
grep -v success file | grep -v 'ok$'
例:
$ cat file
success something else
success ok
just something else
$ grep -Ev 'success|ok$'
just something else
$ grep -v success file | grep -v 'ok$'
just something else
以下を含む行を削除してください。両方文字列、特にgrep:
grep -v 'success.*ok$' file
例:
$ cat file
success something else
success ok
just something else
$ grep -v 'success.*ok$' file
success something else
just something else
答え2
試してみましょうawk
awk '/success/ { next ; } /ok$/ { next ; } { print ;}' file
どこ
/success/ { next ; }
単語を検索してsuccess
行をスキップ/ok$/ { next ; }
小文字を検索してok
行をスキップする{ print ;}
暗黙のelse:印刷ライン
提案によると
ショート awk (Stéphane Chazelasに感謝)
awk '!/success/ && !/ok$/'
これは基本的に(成功)でも(行末OK)でもありません.
ゴルフをする(ありがとう CAS)
awk '! /success|ok$/'
正規表現を再利用し、それを無効にします。
答え3
上記のgrep -Evコマンドに追加:以下を使用できます。egrep -v 'success|ok$' filename
答え4
awkが言及されているので、他のオプションはsedです。
sed '/success/d;/ok$/d' file
sed -e '/success/d' -e '/ok$/d' file
または(最新のsedと今後のPOSIX)Stéphane Chazelasに感謝します.
sed -E '/success|ok$/d' file