Bash 質問の Grep

Bash 質問の Grep

例の文字列:

--000000000000f104a6057d4a0a10

ここで決定する必要があるのは「--」です。

同じファイルには同様の文字列がたくさん含まれており、------=_現在--=_返されます-------------<したがって、正規表現が適している必要があります。現在、私もそれらを得る:(

私が持っている正規表現:^--\w+上記のように期待された結果はgrepでは失敗しますが、Gedit、Bluefish ... grep:grep -r '^--\w+' file..では動作し、結果が返されず、grep -r '^--' file多くのエラーが発生します。

似ているがより複雑な別の例:文字列例:

--b1_3445ee3d64c0259d451a115045580266

この部分を特定してください。--b1_....

ベストアンサー1

デフォルトでは、StandardはgrepPerlに似た正規表現(PCRE)を理解していません。たとえば、GNUは標準動作の拡張である基本正規\w表現(および拡張正規表現)もgrep処理します。他のPCREはそのオプションを使用してGNUで有効になります。\w\Wgrep-P

コマンドが何も返さない理由は、+拡張正規表現演算子であり、-EGNUで動作する必要があるためです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

おすすめ記事