私は文字列に正確に一致する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