2017-11-08 13 views
0

私はgrepを使って "bead"という単語を含む行を "\ b"で検索しようとしましたが、スペースで区切られた "bead"という単語を含む行は見つかりませんでした。私はこのスクリプトを試してみました:Grepの単語境界にはスペースが含まれていますか?

cat in.txt | grep -i "\bbead\b" > out.txt 

私は

  • BEAD-air.JPG
  • のような結果がビーズ、3は
  • ビーズMET DP110317.jpgを両面得ます。
を.jpgの
  • ロマーノ - 英国のペンダントお守り(ビーズ)(FindID 241983)を.jpgのプーホアサイトの
  • ビーズ(宝石)、アーティファクト(ドンナイ省)には.jpg -2819(FindID 10143)

    しかし、私は代わりに、いくつかの2000行を取得する

    • ビーズfun.jpg

    のような結果を得ることはありません、私は唯一の92行

    を取得しています

    私のOSはWindows 10 - 64ビットですが、私はGnuWin32パッケージからgrep 2.5.4を使用しています。

    また、grep 3.0を含むMSYS2も試しましたが、同じことがあります。

    次に、スペースで区切られた単語を検索するにはどうすればよいですか?

    後編集: 大きなファイルにはgrepの問題があるようです。私の入力ファイルのサイズは2.4 GBです。小さなファイルでは、動作します - ここでバグを報告しました:https://sourceforge.net/p/getgnuwin32/discussion/554300/thread/03a84e6b/

  • +0

    を提供します:\ bbead \私のために – Cyrus

    +0

    作品b'' 'グレップの-i」。どのように 'cat'をウィンドウで使うことができますか? – Toto

    +0

    @Toto - 私はGnuWin32パッケージを使用しています。それはすべてのLinuxツールを含んでいます。 – Fructibus

    答えて

    1

    あなたは正常に動作していますが、単語の境界とみなされるものと考えられないものを設定する方法があります。むしろそれを心配よりも、代わりにこれを試してください。

    cat in.txt | grep -iP "\bbead(\b|\s)" > out.txt 
    

    Pオプションは、Perlの正規表現力に追加され、\ sは空白文字の任意の並べ替えを一致します。 The Or Bar |は、括弧内のオプションを区切ります。()

    grepが修正されるのを待っている間は、別のツールを利用することができます。例えば。

    perl -lane 'print if (m/\bbead\b/i);' in.txt > out.txt 
    
    +0

    これは知っておきたいことです、ありがとうございます。大規模なファイルを処理するときにgrepにバグがあるように思えます。私は質問を更新し、バグレポートのリンク – Fructibus

    1

    cat in.txt | grep -wi "bead" 
    

    -w、これを試してみてください多分それが可能だあなたの全単語検索

    関連する問題