以下のように、テキストファイルに複数行があります。:100
、:101
toに似た: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]
の間の単一文字に一致します。式を行末に固定します。0
9
$
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と一致します。 (私は「数字」と言いますが、正規表現は常にひも)。