Word_1
やWord_2
ではなく、以下のLine A
のように、Line B
とLine C
の2つの単語を順番に含むファイル内の行を見つけたい:
Line A: ... Word_1 .... Word_2 ....
Line B: ... Word_1 ....
Line C: ... Word_2 ....
私が試してみました
$ack '*Word_1*Word_2'
$ack '(Word_1)+*(Word_2)+'
正規表現の先頭に^
が追加された同じコマンド(Perlの正規表現構文に従うため)。
これらのコマンドはいずれも、関心のあるファイルや行を返しません。
何が悪いのですか?
ありがとう!
Word_1
に続けて、何でも、何回でも、_Word_2
を続けて検索します。それは
Word_1.*Word_2
*
はコマンドライン検索でよく使用されるため、使用しているようですが、正規表現では、前の文字の数量詞であり、少なくとも0回一致することを意味します。たとえば、正規表現a*
は0以上のa
sに一致しますが、正規表現a+
は少なくとも1つのa
に一致します。
「すべてに一致する」を意味する正規表現のメタ文字は.
であるため、.*
は「何にでも、何回でも一致する」という意味です。このトピックの簡単な概要については、 perlrequick を参照してください。