2

ログ ファイルに、問題のビルドのバージョン番号を含む行があります。常に 1.43.93.* になります。

<some text > Version=1.43.98.7488, <more text>

バージョン番号を抽出したいだけです。

次のいずれも何も返しません。

grep -G -m 1 1.43.98\.\d+ mylog.txt
egrep -m 1 "1.43.98\.\d+" mylog.txt

ビルド番号はログファイルの複数の場所で発生します (これが -m フラグに値 1 を渡す理由です) が、明らかに最初の一致のみに関心があります。

ヒントをいただければ幸いです。Cygwin (GNU grep 2.6.3) を使用しています。

ありがとう

4

3 に答える 3

5

まず、それが\d機能することを確認します。おそらく、-Pオプション(perl regex)を設定し、単純なものに対してテストする必要があります。

正規表現が1つのプラットフォームで機能し、別のプラットフォームでは機能しないのはなぜかと何時間もかけて、-Pオプションを有効にせずに1台のマシンでgrepが構築されていることを確認しました。すべての\d正規表現が無視されていたため、いずれか[:digit:]または[0-9]代わりに使用する必要がありました:(

于 2012-06-11T10:33:44.770 に答える
2
grep -o -m 1 1.43.98.[[:digit:]]* a
于 2012-06-11T10:32:43.977 に答える
1

私はcygwin envを持っていません。次の grep 行は Linux でテストされました。

kent$  cat a
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>
<some text > Version=1.43.98.7488, <more text>

kent$  grep -oPm 1 '(?<=Version=)[0-9\.]+(?=,)' a
1.43.98.7488


kent$  grep -V
GNU grep 2.5.3
于 2012-06-11T10:19:01.833 に答える