ファイル内の特定の行からパターンをgrepし、同じ行で一致するものが見つかった場合は、その行を出力します。

ファイル内の特定の行からパターンをgrepし、同じ行で一致するものが見つかった場合は、その行を出力します。

次の内容を含むtemp.logというファイルがあります。

blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[0238234234-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah
blahblah SomeOtherClassName blahblahblah
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah

MyClassNameを含むログ行とsessioncope、pagescope、またはrequestscopeのいずれかの値がトークン値と一致しない場合は、ログファイルを解析して出力したいと思います。たとえば、私の例では、2行と4行にMyClassNameがあり、これら2行のうち4行にトークンとは異なるSessionScope値があるため、4行を出力する必要があります。 grepおよび逆参照オプションのために困難を経験しています。

ベストアンサー1

トークンをグループとしてキャプチャし、逆参照を使用してテストします。

$ grep 'MyClassName' log | 
  grep -vE 'token:(\[[[:xdigit:]-]+\]),SessionScope:\1,PageScope:\1,RequestScope:\1'
blahblah MyClassName blah blah blah userId:[6729223726254951za],key:[09809890980980908d0e6],token:[0238234234-3948-4d9],SessionScope:[1111111-3948-4d9],PageScope:[0238234234-3948-4d9],RequestScope:[0238234234-3948-4d9], requestUrl:/blah/blah/blah

おすすめ記事