数値範囲のgrep行

数値範囲のgrep行

以下のように、テキストファイルに複数行があります。:100:101toに似た:102パターンを持つすべての行をgrepしたいと思います:199。このように検索するのではなく、どのようにこれらの行を取得できますか?:100\|:101\|:102...

abcd fhijk:123
abcd fhijk:124
abcd fhijk:174
abcd fhijk:225

ベストアンサー1

数値は、常に単位、単項プラス記号、またはその他の修正がない正の整数であると仮定します。

正規表現は数値の比較には適していませんが、入力データを2つの別々の列として:扱う場合は、次のように処理する方が簡単ですawk

awk -F ':' '$2 >= 100 && $2 <= 199' <file

これは、データの2番目に区切られたフィールドを:100および199と比較し、数値が指定された範囲内にある場合は行全体を印刷します。

使用することもできますが、grep柔軟性が低下します。

grep ':1[0-9][0-9]$' <file

この式は、と[0-9]の間の単一文字に一致します。式を行末に固定します。09$

100から250までの数字を持つ行を一致させるには199コードをawkに変更しますが、250正規表現を使用するには次のようにする必要があります。

grep -E ':(1[0-9][0-9]|2[0-4][0-9]|250)$' <file

ここで、括弧の3つの部分は100から199までの数字と一致し、次に200から249まで、最後に250と一致します。 (私は「数字」と言いますが、正規表現は常にひも)。

おすすめ記事