0

grep コマンドを使用して、ファイル内の行の一致する文字列のみを検索して出力する必要があります。

以下はテキストの例です。

04-06-2013 INFO blah blah blah blah Param : 39 another text Ending the line.
05-06-2013 INFO blah blah allah line 2 ending here with Param : 21.

grep コマンドの後に出力を以下のように出力したい

04-06-2013 INFO   Param : 39
04-06-2013 INFO   Param : 21

-o オプションと regex を指定して grep コマンドを試し'.*INFO'ました。単一のコマンドでこれが必要な場合、異なるgrepコマンドで両方のテキストを別々に印刷することに成功しました。

前もって感謝します。

4

2 に答える 2

2
grep -o ".*INFO\|Param : [0-9]*"
于 2013-06-05T10:59:39.677 に答える
1

グループ化された用語で正規表現を指定し、正規表現全体に一致するすべてのものではなく、特定の正規表現グループのみを出力する必要があるため、純粋なgrepでこれを実行できるかどうかはわかりません-したがって、たとえば(.*INFO)(.*)(Param : [0-9]*)、正規表現として指定し、グループ1とのみを出力3します (カウントを 1 から開始すると仮定します)。

ただしsed、出力を後処理するために使用できます。

% cat foo
04-06-2013 INFO blah blah blah blah Param : 39 another text Ending the line.
05-06-2013 INFO blah blah allah line 2 ending here with Param : 21.
% grep 'Param :' foo | sed 's/\(.*INFO\)\(.*\)\(Param : [0-9]*\)\(.*\)/\1 \3/'
04-06-2013 INFO Param : 39
05-06-2013 INFO Param : 21

私が上で行っているのは、一致をスペースで区切られたグループ1とのみに置き換えることです。3

この質問は関連していると思います(おそらく重複している可能性もあります)。

于 2013-06-05T10:53:22.353 に答える