だからテキストファイルがあります。
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:]]*'