Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Grepの「-o」オプションを活用し最後に一致した要素だけ出力する

先日の最後の要素を引っ張り出す事例Grepの魔法を使って書き直すと

$ echo http://s3.amazonaws.com/downloads.basho.com/stanchion/1.5/1.5.0/osx/10.8/stanchion-1.5.0-OSX-x86_64.tar.gz | grep -o '[^\/]*$'

となります。

oオプションは

-o, --only-matching
マッチする行のマッチした部分だけを (それが空文字列でなければ) 表
示します。 マッチした各文字列は、それぞれ別の行に書き出します。

とある通り、一致した部分だけ出力します。
Grepは次の一致条件が来た場合、前に入っていたものを上書きするので
1. 「/」から始まる要素に一致
2. 次の要素が来た場合、前の要素を排除
3. 末尾まで到達した場合、最後に保持していた値を出力
といった塩梅で動作します。

ためしに先ほどの例をオプション抜きでやると

http://s3.amazonaws.com/downloads.basho.com/stanchion/1.5/1.5.0/osx/10.8/stanchion-1.5.0-OSX-x86_64.tar.gz

と全力で全文返してくれます。