例の文字列:
--000000000000f104a6057d4a0a10
ここで決定する必要があるのは「--
」です。
同じファイルには同様の文字列がたくさん含まれており、------=_
現在--=_
返されます-----------
。--<
したがって、正規表現が適している必要があります。現在、私もそれらを得る:(
私が持っている正規表現:^--\w+
上記のように期待された結果はgrepでは失敗しますが、Gedit、Bluefish ... grep:grep -r '^--\w+' file
..では動作し、結果が返されず、grep -r '^--' file
多くのエラーが発生します。
似ているがより複雑な別の例:文字列例:
--b1_3445ee3d64c0259d451a115045580266
この部分を特定してください。--b1_....
ベストアンサー1
デフォルトでは、Standardはgrep
Perlに似た正規表現(PCRE)を理解していません。たとえば、GNUは標準動作の拡張である基本正規\w
表現(および拡張正規表現)もgrep
処理します。他のPCREはそのオプションを使用してGNUで有効になります。\w
\W
grep
-P
コマンドが何も返さない理由は、+
拡張正規表現演算子であり、-E
GNUで動作する必要があるためですgrep
。
grep -E '^--\w+' file
そうでない場合、-E
式は--W+
文字通り一致しようとします(W
単一文字が一致する場合\w
)。
また、次のように式を最後に固定することもできます。
grep -E '^--\w+$' file
それ以外の場合は、\w
後で文字以外の行を含む行と一致します。
--00000000=
または、次のものを使用できます。
grep -xE -e '--\w+' file
それは同じことをします。この-x
オプションは、行全体の一致を強制します。パターンはダッシュで始まるので、-e
コマンドラインオプションと式を区別する必要があります。
GNUはgrep
また、\+
基本正規表現を理解します(またgrep
はなしで使用する場合でも)。-E
-P
grep -x -e '--\w\+' file
\{1,\}
または代わりに使用することもできます\+
。
GNUでない場合grep
(そしてGNU grep
)の代わりに、以下を使用できます[[:alnum:]_]
(文字、数字、またはここに含まれるアンダースコアと一致)\w
。
grep -xE -e '--[[:alnum:]_]+' file
16進数と下線を一致させるには、次のようにします[[:xdigit:]_]
。
grep -xE -e '--[[:xdigit:]_]+' file
または、
LC_ALL=C grep -xE -e '--[0-9a-fA-F_]+' file
LC_ALL
文字範囲はロケールによって異なるため、コマンドの to C
(または to POSIX
) 設定が必要です。grep