サンプルログメッセージに
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