grepの数値範囲内の単一の数値のみを一致させます。

grepの数値範囲内の単一の数値のみを一致させます。

次のファイルがある場合:

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com
hostname23.domain.com
hostname1234.domain.com

どのようgrepに返品できますか?

hostname1.domain.com
hostname2.domain.com
hostname3.domain.com

これにより、数値のみが返されます。努力しています:

grep -E hostname[+1,+2,+3].domain.com

この方法がうまくいくようですが、より良い方法があるかどうか疑問に思います。

ベストアンサー1

する:

grep 'hostname[0-9]\.domain\.com' infile

[0-9]0から9の間の単一の数字を一致させるには、点を文字通り一致させるように点をエスケープする必要があります.。それ以外の場合は、任意の単一文字(ショートカット)と一致し、ワイルドカードなどの特殊アイテムに対するシェルの混乱を避けるために常にパターンを引用することを意味します。中括弧の拡張などについて説明します。

ホスト名1、2、3にのみ制限するには、次のようにします。

grep 'hostname[123]\.domain\.com' infile

または均等に:

grep 'hostname[1-3]\.domain\.com' infile

使用することもできます-x(すべての行に正確に一致する一致のみを選択するか、行の^開始アンカーと$終了アンカーで囲む)。

grep -x 'hostname[0-9]\.domain\.com' infile
grep  '^hostname[0-9]\.domain\.com$' infile

文字列を正確に一致させ、hostname23.domain.com他に何もありません。

grep -xF 'hostname23.domain.com' infile

バラより人々はgrep-Fスイッチとここに脱出ポイントがない理由について説明します。

おすすめ記事