スポンサーリンク

grepの正規表現で、最短一致で文字列を抽出する

※MACターミナル(BSD系)での動作確認です。

grepの正規表現での検索は、デフォルトは最長一致です。
最短一致にするには、"?" を使います。
".*?"のパターンをよく使います。

例えば、下記のin.txtがあったとします。

$ cat in.txt 
findfind
grep
awkfound

"f.*d"でマッチングさせると、最長一致なのでfindfindが引っ掛かります。

参考:grepの-oオプションで検索にマッチした部分のみ出力

$ cat in.txt | grep -o -E "f.*d"
findfind
found

findのみを引っ掛けたい場合には、"?"を使って "f.*?d"とします。
下記が実行結果になります。

$ cat in.txt | grep -o -E "f.*?d"
find
find
found

スポンサーリンク