次のファイルがある場合:
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
スイッチとここに脱出ポイントがない理由について説明します。