grep
私はLinuxシステム(Deb)でフラッグキャッチコンテストでフラグを取得しようとしています。以下は結果を返しません。flag{ }
ディレクトリに何百ものテキストインスタンスがあることを知っています。
grep -rnw 'Downloads/' -e 'flag{' | more
なぜ?どのように検索できますかflag{
?以下はうまくいきますが。
grep -rnw 'Downloads/' -e 'flag' | more
ベストアンサー1
を使用すると、改行文字(行の先頭または末尾)または単語以外の文字(単語文字は文字、数字、または下線)の直前または後の一致のみを返すようにgrep -w
要求します。grep
これは、テキスト内の次の文字が単語文字であるため、テキストが 'と一致しないthis is flag{a}
ことを意味します。grep -w 'flag{
{
同様にthis is theflag{
一致しませんgrep -w 'flag{'
。
そのオプションを無視-w
し、代わりに幅がゼロの明示的な単語境界パターン(たとえば、先頭)を使用して一致は可能ですが、flag{a}
一致しない可能性がありますtheflag{
。 GNUの場合は、grep
次を使用してこれを実行できます。
grep -rn '\<flag{' Downloads
または
grep -rn '\bflag{' Downloads
この\<
パターンは、単語の先頭の単語境界と\>
終了の境界を一致させ、\b
開始と終了の両方で一致する。もともとエディタ\<
から継承されました。\>
ex
vi
\b
GNUは単語の先頭または末尾でand( andと同じように動作)一致をサポートしていgrep
ませんが、BSDはサポートしています。 BSDではサポートされていません。[[:<:]]
[[:>:]]
\<
\>
grep
grep
\b