grep: \{\} の内容が正しくありません。

grep: \{\} の内容が正しくありません。

これはコマンドです:

grep '\(2\)[[:digit:]]\{\1\}' numbers

私が望むのは、数字「2」の後に正確に2桁の数字を一致させることです。式で数字「2」を「3」に変更すると3桁の数字と一致し、そうであれば...それから4桁の数字と一致します。

ここでは逆参照を使用していますが、このコマンドを実行すると次の出力が表示されます。

grep: invalid content of \{\}

私の表情はどのように変更できますか?

最初の回避策: Sergeが答えたように:

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}

これは実際には機能しますが、最初のサブ式があると\(34\)仮定すると、その数字を逆参照して34(またはそれ以上)のケースを実装する必要はありません。

答え1

ここでは逆参照は許可されていません。考えられるすべての状況を説明する式を作成する必要があります。たとえば、次のようになります。

2[[:digit:]]\{1\}\|3[[:digit:]]\{2\}\|4[[:digit:]]\{3\}\|5[[:digit:]]\{4\}

答え2

行の実際の最初の番号に基づいて決定するのではなく、最初の値をハードコーディングしたいようです。次のことを検討してください。

HOWMUCH=2 grep "\($HOWMUCH\)[[:digit:]]\{$HOWMUCH\}" numbers

関連情報