1. ホーム
  2. regex

[解決済み] grepで星座を使う

2022-03-03 10:34:44

質問

linux/bashで特定のファイル内の部分文字列"abc"を検索しようとしています。

だから、そうする。

grep '*abc*' myFile

何も返しません。

でも、そうすると

grep 'abc' myFile

正しくマッチを返します。

さて、これは私にとっては問題ではありません。しかし、もっと複雑な文字列をgrepしたい場合はどうでしょう。

*abc * def *

grep を使ってどのように実現するのでしょうか?

どのように解決するのですか?

アスタリスクは、ちょうど 繰り返し演算子 しかし、何を繰り返すかを指示する必要があります。 /*abc*/ は,abと0個以上のcを含む文字列にマッチする(2番目の*はcの上にあるため,1番目は繰り返すものがないので意味がない).もし何かにマッチさせたいなら、次のように言う必要がある。 .* -- ドットは任意の文字 ( 一定のガイドラインの範囲内で ). もし、abcだけにマッチさせたいのであれば、次のようにすればよいでしょう。 grep 'abc' myFile . より複雑なマッチングには .* -- grep 'abc.*def' myFile は、abcの後にdefを含み、その間に任意で何かを挟む文字列にマッチします。

コメントに基づいて更新します。

* は、正規表現での * と全く同じではありません。コンソールでは、*は グロブ構成 であり、単にワイルドカードとして機能する(例えば ls *.log は、末尾が.logのファイルをすべてリストアップします)。しかし、正規表現では、*は修飾語であり、その前にある文字またはグループにのみ適用されることを意味します。正規表現の * をワイルドカードとして使用したい場合は、次のようにします。 .* ドットはワイルドカード文字で、星印はドットを修正するときに、1つ以上のドットを見つけることを意味します。