egrepで繰り返される数字のないパターンを見つける

egrepで繰り返される数字のないパターンを見つける

数字を繰り返すことなく、すべての数字シーケンスに一致する正規表現を探したいと思います。例:

198345 - >一致します。

198315 - >一致しない(1が2回繰り返される)

どうやってこれを達成できますかgrep\egrep

答え1

興味深い質問です。ありがとうございます。私はこの答えが少し不気味だと思います。

egrep -v '([0-9])[0-9]*\1'

パターンは数字の発生を見つけて[0-9]保存し\1、重複しないことを確認します。したがって、同じ数字が続くランダムな数字を探します。-v駅として使用

答え2

これに正規表現を使用する必要がある場合は、次を参照してください。同様の質問に対するStephenの素晴らしい答え

正規表現が必要ない場合は、Perl の代替手段を提供します。

perl -nle '
    $digits{$_}++ for /([0-9])/g;
    @repeated = grep { $digits{$_} > 1 } keys %digits;
    print @repeated? "":"$_"
    %digits = ();
' your_file

これはyour_file、1行に1つの数字があると仮定し、数字が一意の数字のみを印刷します。

答え3

編集する:

次の同じ数字は連続して表示する必要があります。 1123456(連続1)と一致しますが、1213456(非連続1)は一致しません。

不都合な解決策は次のとおりです。

cat testfile |  grep [0-9] | grep -v "0\{2,\}" | grep -v "1\{2,\}" | grep -v "2\{2,\}"  | grep -v "3\{2,\}"  | grep -v "4\{2,\}"  | grep -v "5\{2,\}"  | grep -v "6\{2,\}"  | grep -v "7\{2,\}"  | grep -v "8\{2,\}"  | grep -v "9\{2,\}"  

最初のものはgrep数字と一致し、残りの10個はgrep各数字が一度だけ表示されることを確認します。

より簡潔だが、まだ不都合な方法は次のとおりです。

cat test |  grep [0-9] | grep -v "1\{2,\}\|2\{2,\}\|3\{2,\}\|4\{2,\}\|5\{2,\}\|6\{2,\}\|7\{2,\}\|8\{2,\}\|9\{2,\}\|0\{2,\}"

testfile1行に1つの単語が必要です。

答え4

grep '\([[:digit:]]\) *\1 *\1'

数字が必要[[:digit:]]で、それを覚えています\( ... \)。その後、スペースの数*(スペースなしを含む)、記憶された文字\1、スペースの数、記憶された文字を一致させようとします。これを実行して、--color=auto一致する入力部分を確認できます。

関連情報