Grepは追加の行を表示します

Grepは追加の行を表示します

だからテキストファイルがあります。

4556 4618 7843 8732
 4532 0861 1932 5122 
3478 893* 6788 6312
5440 3173 8207 0451 67886
6011 2966 7184 4668       
3678 3905 5323
  2389 4387        9336 2783  
239 235 453 3458
182 534 654 765
 4485 0721 1308 2759
46759 543 2345

私は4桁の数字を一緒に4回連続して(スペースで区切って)探したいと思います。

たとえば、4556 4618 7843 8732

私は以下を使用しています: grep -E "([0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4})" test.txt

これは私に次のように伝えます。

4556 4618 7843 8732
 4532 0861 1932 5122 
5440 3173 8207 0451 67886
6011 2966 7184 4668       
 4485 0721 1308 2759

この機能を使用すると、5番目の数値セットと最後に5桁の数字が含まれているため、表示しない追加の行が生成されます。

だから私は以下を使用しました。 grep -E "([0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4})$" test.txt

ただし、これは4つの結果の代わりに2つの結果のみを提供します。

4556 4618 7843 8732
 4485 0721 1308 2759

誰かが私が間違っていることを教えてもらえますか?

ベストアンサー1

$ grep -E '^[[:blank:]]*[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}[[:blank:]]*$' file
4556 4618 7843 8732
 4532 0861 1932 5122
6011 2966 7184 4668
 4485 0721 1308 2759

あなたの表現は4行に一致します以上スペースで区切られた4桁のグループ。括弧は式で何もしません。

上記の式は、パターンを行の先頭と末尾に固定し、最初の数値セットの前と最後の数値セットの後にスペースまたはタブのみを許可します。

^アンカーポイントを使用する代わりに、次のものを使用$できますgrep -x

grep -Ex '[[:blank:]]*[0-9]{4} [0-9]{4} [0-9]{4} [0-9]{4}[[:blank:]]*'

これを減らして、ジェフが示すように

grep -Ex '[[:blank:]]*([0-9]{4} ){3}[0-9]{4}[[:blank:]]*'

おすすめ記事