BASH:値セットをGrepして表示する方法

BASH:値セットをGrepして表示する方法

サンプルログメッセージに

20161110-15:29:39.707932513|8=FIX.4.29=031735=D34=00000389552=20161110-15:29:39.70749=413050=11156=DDG109=4130115=EAGLE7|EAGLE7116=eagle_fix_trader11|eagle_fix_trader11144=DAU|E7T9139=eagle_fix_trader119195=U439=805440=150854029208=221=1167=FUT55=14198040=259=054=111=41301110400144=0000035.0000000038=00000000760=20161110-15:29:39.70710=092

上記で9139の値のみを表示して、次のように見せることができますか?

9139=eagle_fix_trader11

次のコマンドを使用しました。

ls | grep -Eo '9139=[a-z]{0,8}' 9707le8.log

しかし、私はただ得るだけです。

9139=eagle

変える

9139=eagle_fix_trader11

どんなアイデアがありますか?

ベストアンサー1

まずls |、そこにはまったく役に立ちません。9707le8.log現在のディレクトリ(印刷ディレクトリ)のファイルやディレクトリのリストではなく、ファイル内で検索しようとしていますls。それにもかかわらず、grepパイプで接続されたすべての入力()は、コマンドラインから検索するファイル名が与えられると無視されます。| grep

つまり、正規表現は「9139=<= 8つの小文字の後に続く文字列を検索する」を意味します。しかし;=後ろには5文字しかありません。 6番目の文字は文字グループ_に属していません。[a-z]簡単な解決策は、次をクラスに追加することです。

$ grep -Eo '9139=[a-z_]{0,8}' 9707le8.log
9139=eagle_fi

これで、必要に応じて9139=eagle_fix11文字を追加する必要があります。

$ grep -Eo '9139=[a-z_]{0,18}' 9707le8.log
9139=eagle_fix_trader

[a-z_]今回は数字が含まれておらず、一致しないことが問題です。だからあなたは次のようなものが欲しい:

$ grep -Eo '9139=[a-z_0-9]{0,18}' 9707le8.log
9139=eagle_fix_trader11

9139=または、小文字の文字列または2つの数字が必要なより一般的な場合は、次のように_します。

$ grep -Eo '9139=[a-z_]+[0-9]{2}' 9707le8.log
9139=eagle_fix_trader11

またはGNU grepを使用してください。

$ grep -Po '9139=[a-z_]+\d{2}' 9707le8.log
9139=eagle_fix_trader11

おすすめ記事