と照合する、あなたの正規表現は動作します。私は(UUoCを避けて)あなたのコマンドを実行すると
{% highlight ruby %}
{% endhighlight %}
not this line, though
nor {%this%}
、私は出力を示します:入力ファイルfile.md
含む考える
$ egrep '{% +' file.md
{% highlight ruby %}
{% endhighlight %}
$
をあなたが使用しているegrep
のバージョンを特定していませんでしたし、どのプラットフォームを使用しているかを示します。私はMac OS X 10.11.6を使っていて、egrep (BSD grep) 2.5.1-FreeBSD
を使っています(しかし、私はGNU Grep 2.25でも同じ結果になります)。
{
はegrep
のメタ文字であり、期待通りに最初の{
を処理していない可能性があることに注意してください。私は最初と最後の括弧をエスケープするバックスラッシュを使用
$ egrep '\{% {1,4}[a-z]{4,20} {1,4}%\}' file.md
{% endhighlight %}
$
:
例えば、ここでの唯一のendhighlight
行を選択する必要があり、より複雑なegrep
呼び出しがあります。 {n,m}
という表記法は、上記の正規表現(空白および[a-z]
)のn≤x≤mの一致を意味します。を意味します。 ,m
は省略できます。 {4,}
を使用することもできます - これらを理解するにはマニュアルをチェックしてください。しかし、私のマシン上で、私も実行することができます。おそらく
$ egrep '{% {1,4}[a-z]{4,20} {1,4}%}' file.md
{% endhighlight %}
$
を、最初{
は{n,m}
シーケンスを開始しないので、それは通常の文字として扱われます。
あなたはExtended Regular ExpressionsのためのPOSIX仕様を見れば、あなたはそれがそのような{
を使用すると、未定義の動作であると言うことがわかります:
*+?{
<asterisk>
、<plus-sign>
、<question-mark>
、および<left-brace>
条ブラケット式(REブラケット式を参照)で使用される場合を除いては、特別なものにしてください。これらの文字は、EREに最初に表示される、または<left-brace>
が有効な区間の一部でない場合は、直ちに<vertical-line>
、<circumflex>
、または<left-parenthesis>
を以下の場合は
ので、POSIXによると、あなたはそのP正規表現を使用しています未定義の結果が得られます。したがって、POSIXが受け入れられると判断した結果が得られます。この場合
$ egrep '\{% +' file.md
{% highlight ruby %}
{% endhighlight %}
$
が '' *数量詞と '' +数量詞を置き換える:
明らかに、あなたは以下を使用して、あなたが期待する結果を得ることができる必要があります。何が問題ですか? –
*は機能しますが、スペースを使用することもできません。スペースを確保するにはどうすればいいですか?私はそれが何をするのですが、うまくいかないようです。 – duffney
'+'を削除して、動作しているか確認してください。 1つ以上一致する必要があるため、量指定子は冗長です。 1の場合、 '' {% ''は既に十分です。また、スペースではなくタブがあるかもしれません。リテラルスペースの代わりに '[[:blank:]]'を試してください。 –