正規表現を使用して、文字がn回繰り返される行を一致させます。

正規表現を使用して、文字がn回繰り返される行を一致させます。

私は文字列に正確に一致するgrep正規表現を探しています。¥¥行に。
データファイルの例は次のとおりです。

¥¥                     
q rr a                 
  アルファベット¥¥D                
ララララアア¥¥QQ   
ケデルハート¥¥ああ  ¥¥寝る

予想される結果は次のとおりです。

rr
  abcrr d
rarrrrrr aaa rrqq
kdhdrraa rrzaza

どんな提案がありますか?

ベストアンサー1

標準grep構文とBREを使用してください。

$ grep -x '\(.*[^r]\)\{0,1\}rr\([^r].*\)\{0,1\}' < ファイル
¥¥
ABCD
rarrrrrrああああああああああああああ
ケドラジャザ

(42rr秒に置き換え)r\{42\}r

それがeと一致するのXactly(つまり、行全体)は、オプションでrr\{0,1\}0または1、EREと同じ)の前に?()以外の文字で終わる文字列が続き、オプションで他の文字で始まる文字列が続きます。より( )。r[^r]r

EREを使用してください:

$ grep -E '(^|[^r])rr([^r]|$)' < ファイル
¥¥
abcrrD
ララララアアQURキュー
ケデデイラrzアザ

(42rr秒に置き換え)r{42}r

その前にはrr行の先頭またはそうでない文字がありr、その後には行の終わりまたはそうでない文字が続きますr

PCREの使用(非標準):

$ grep -P '(?<!r)rr(?!r)' < ファイル
¥¥
アルファベット¥¥D
ララララアア¥¥QQ
ケデルハート¥¥ああ¥¥寝る

(42rr秒に置き換え)r{42}r

それは、rr いいえ前または後のいずれかですr

そして改善RE(即時オープンgrep):

$ grep -xX '(.*r)!rr(r.*)!'
¥¥
ABCD
rarrrrrrああああああああああああああ
ケドラジャザ

(42rr秒に置き換え)r{42}r

おすすめ記事