複数のgrepを正規表現と組み合わせる

複数のgrepを正規表現と組み合わせる

私はこのファイルを持っています:

10 replies
Big Horse
123sdf562
replies
1354654
Fat Cat
2 replies
White Horse
Big Cat
Little Dog
5 replies
725vgfvjgh123
Black Horse
Brown Cow
8798jgjh

返信の前に数字が続く単語と数字で囲まれた文字を含む行を抽出したいと思います。したがって、私が望む結果は次のようになります。

10 replies
Big Horse
123sdf562
2 replies
White Horse
5 replies
725vgfvjgh123
Black Horse

このコードはgrep '[0-9] replies\|[0-9][a-z]\|Horse' file次を返します。

Big Horse
123sdf562
2 replies
White Horse
5 replies
725vgfvjgh123
Black Horse
8798jgjh

ただし、数字で囲まれていない8798jgjhため、出力には表示しないでください。jgjh

grep '[0-9] replies\|[0-9][a-z][0-9]\|Horse' file動作しません。それでは、正しい出力をどのように取得できますか?

ベストアンサー1

これを使用できますgrep。複数の場所で数量子(BREで)を使用するという考えは、使用された\{1,\}グループ内の少なくとも1つの文字を一致させることです。ポータブルバージョンは

grep '[0-9]\{1,\}[[:space:]]\{1,\}replies\|Horse\|[0-9]\{1,\}[a-z]\{1,\}[0-9]\{1,\}' file

grepGNU grepなどのEREをサポートするバージョンでは、式にエスケープ文字を追加する必要はありません。

grep -E '[0-9]{1,}[[:space:]]+replies|Horse|[0-9]{1,}[a-z]{1,}[0-9]{1,}' file

[0-9]文字クラスグループをなどのロケールに依存しないグループに置き換えることができます。[a-z][[:digit:]][[:lower:]]

正規表現 - レビュー

おすすめ記事