[RT]"anything"Dのある文字列を検索したいです。言い換えれば、最初の文字はRまたはTになり、次の文字はDが表示されるまで任意の文字にすることができます。 「egrep」を使うべきですか?
答え1
GNU grepおよびPCRE(Perl-Compatible Regular Expressions)サポートがある場合(有効にして-P
)、次のことができます。
grep -o -P 'RT.*?D' file
私たちはPCREが欲しいです。怠惰な数量子()単独で使用する代わりに?
一緒に使用できます。後者は貪欲で、すべてを飲み込むでしょう。.*
.*
最後 D
...
$ grep -o 'RT.*D' <<< "JKIRTTHIUCDELKJUCDE"
RTTHIUCDELKJUCD
$ grep -o -P 'RT.*?D' <<< "JKIABTHIUCDELKJUCDE"
RTTHIUCD
ああ、そしてこの-o
フラグは、grep
行全体を印刷するデフォルトの動作ではなく、行の一致する部分だけを印刷するように指示します。
D
注:これには1つの重要な違いがありますが、閉じた重複質問でマージされました。ここで、パターンの最後の部分は単一文字ではなく複数文字です。単一文字の場合はPCREなしで処理できますが(ここでは他の回答を参照)、複数文字の場合はBREまたはERE構文では使用できない機能が必要です。
答え2
コメントでわかるように。grep
仕事を終えるのに十分です。スキーマを[RT].*D
。
初めて見るにD
はを使用してください[RT][^D]*D
。
質問の「最初の文字」のためにキャレットを追加しました。このフレーズが異なる意味を持つことができることに気づき、カラットを削除しました。