2017-09-28 5 views
2

iダッシュが文字列内にある場合、 "grep -w"は一意ではありません。これをどうすれば解決できますか?ダッシュが文字列内にある場合、grep -wは一意ではありません。

例:

ファイル1:

football01
football01test

# grep -iw ^football01 
football01 

ファイル2:

football01
football01テスト

# grep -iw ^football01 
football01 
football01-test 
+0

あなたの質問に具体的にお答えください。 – RavinderSingh13

+1

'-w'フラグはgrepを単語全体でのみ一致させ、' -'は単語区切り文字と見なします。 'grep -i"^football01 $ "' – 0x5453

+0

@Michaelを使用することができる行全体をマッチさせようとしている場合、答えの一つがあなたを助けたならば、それをあなたの質問に閉じ込める答えとしてマークしてください?Hannuの答えはより早く発表され、受け入れのためのより良い候補者である。 – zedfoxus

答えて

3

これが予想され、文書化された動作です:あなたはダッシュを追加する場合ダッシュが「非であるとして、それはあなたの最初の単語を終了

-w, --word-regexp 
      Select only those lines containing matches that form whole words. The test is that the 
      matching substring must either be at the beginning of the line, or preceded by a non-word 
      constituent character. Similarly, it must be either at the end of the line or followed 
      by a non-word constituent character. Word-constituent characters are letters, digits, 
      and the underscore. 

「単語構成文字」となる。単語をまとめて書くと、単語正規表現のgrepはそれを1つの単語として扱い、それにマッチしません。

あなたは何をしたいのですか?

あなただけの行がfootball01何もないかどうかを知りたい場合は、

grep -i "^football01$" 

としてそれを行うことができます、あなたが何かを達成したい場合、あなたはそれが何であるかを説明してください可能性があります。

1

-wスイッチは単語正規表現用です。 file1では、football01testは単語であり、file2はsoccer01であり、testはハイフンで区切られた2つの単語です。

男のgrepが-w

のためにこれを言う全体 の単語にマッチする行のみを選択します。このテストでは、一致する部分文字列が、行の先頭にある にあるか、または単語以外の構成要素の前にあるか、 文字である必要があります。同様に、それは 行の終わりにあるか、または単語の後ろにない構成文字でなければなりません。 単語構成文字は、英字、数字、アンダースコアです。 football01以来

はあなたのgrepからその情報を取得されていません、単語全体としてfootball01testと一致していません。

grep -i ^football01 file1.txtを行う場合は、両方の行が表示されます。

関連する問題