bashでシングルクォートを含む文字列を正規表現マッチさせる

投稿者: Anonymous

VimのNeoBundleプラグインにプラグインを追加するスクリプトを書いています。

そのため、以下のような文字列を正規表現マッチで検出したいと考えています。

NeoBundle 'hoge/fuga.vim'

この場合、閉じシングルクォートを除けば以下のような条件式でマッチできるのですが、閉じシングルクォートを含む条件式がわかりません。

$ query="NeoBundle 'hoge/fuga.vim'"
$ echo "$query" | grep -oE $'NeoBundle '[0-9a-zA-Z-]+/[0-9a-zA-Z-]+'
NeoBundle 'hoge/fuga.vim

予めシングルクォートを置換するなどの対策は可能だと思いますが、対象の文字列を変更せずに正規表現マッチできないでしょうか。

解決

@argusさんが指摘したとおり、マッチしない直接の原因は正規表現内にドット.と末尾のシングルクォート'が抜けていることだと思います。

表題のように正規表現文字列にシングルクオートを含めたいならば、文字列をダブルクォートで囲む方法が直感的に分かりやすいです。

$ grep -oE "NeoBundle '[0-9a-zA-Z-]+/[.0-9a-zA-Z-]+'"

文字列をシングルクォートで囲んでいる場合は、ちょっとトリッキーになります。

$ grep -oE 'NeoBundle '''[0-9a-zA-Z-]+/[.0-9a-zA-Z-]+''''
回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *