回答:
私はバックスラッシュでそれを行うことができました:
25 % grep \< xmospos.c
#include <stdio.h>
#include <stdlib.h>
#include <getopt.h>
#include <X11/Xlib.h>
引用符で囲まれた、および引用符で囲まれた、バックスラッシュは、どちらも間抜けな答えを与えたよりも少ない。
grep -oP '(?< )(.*)$'
たとえば単一引用符では機能しません。最初に試してみました。
(?<! )(.*)$
か(?<= )(.*)$
?
2つの単純なルール:
\C
は、改行以外の次の文字をエスケープします。'text'
、バックスラッシュを含め、それらの間の任意の文字をエスケープしますが、単一引用符は含みません(引用符で囲まれたテキストの終わりを示すため)。したがって:
grep -P '<html>' myfile
grep -P \<html\> myfile
grep -P '(?<!<)html' myfile
grep -P \(\?\<\!\<\) myfile
単一引用符を含む引数を渡す必要がある場合は、を使用'\''
して、単一引用符内の単一引用符を「エスケープ」できます。技術的には、これは最初のリテラルテキストを終了し、次に'
同じ単語にリテラルを置き、次に同じ単語にさらにリテラルテキストを置きます。
grep '^D'\''oh!' myfile
残りの引用ルール(要約):
!"#$&'()*;<>?[\]^`{|}~
(つまり、次の文字は安全です:文字、数字、%+,-./:=@_
および非ASCII文字)。"$\`
(履歴が有効になっているシェルでは)and 以外のすべての文字が文字どおりに使用され!
ます。二重引用符の間のバックスラッシュは、非リテラル文字の前にない限り、文字列に表示されます。これらのルールは、bashおよびその他のBourneスタイルのシェル(ashやkshなど)に対するものです。それらはzshにも適用されます(=
空白の後に引用が必要になる場合があることを除いて)。csh / tcshとFishのルールは異なります。