おおまかにこれを使ってテキストから不用語を削除しています。 パスワード
私は以下を持っています
$ cat file
file
types
extensions
$ cat stopwords
i
file
types
grep -vwFf stopwords file
私は結果を期待しています:
extensions
でもわかる(合わないと思う)
file
extensions
これは、file
不用語ファイルからその単語をスキップしたのと同じです。今、素晴らしい点は次のとおりです。i
最初の行の単一の単語/文字を、を除く別のASCII文字に変更して不用語ファイルをf
変更i
するl
と、e
同じgrepコマンドが異なり、正しい結果が得られますextensions
。
どうなりますか?どうすれば解決できますか?
Mac OSX GNU bashバージョン4.4.12(1)でgrep(BSD grep)2.5.1-FreeBSDを使用しています。
ベストアンサー1
bsdgrep
これは、まだスキャンする必要がある現在の行の一部を追跡する変数に関連するバグでした。この部分は、複数のパターンが含まれる場合、正規表現マッチングエンジンへの連続呼び出しで上書きされます。
ローカル修正
-w
この変数を使用して正しく機能するため、失敗するオプションを使用せずに、単語の先頭と末尾に一致する正規表現拡張子を使用してstopwords
ファイルを次のように作成して、この問題をある程度解決できます。
\<私\> \<ファイル\> \<タイプ\>
また、この回避策を使用するには、このオプションを使用しないでください-F
。
ご注意ください、録音された正規表現コンポーネント[[:<:]]
と[[:>:]]
マニュアルでre_format
言う内容いいえここで働いてください。これは、正規表現ライブラリがbsdgrep
GNU正規表現互換性サポートを有効にしてコンパイルされるためです。これは修正されたと報告された別のバグです。
サービス修理
そのバグは今年初めに修正されました。修正はまだFreeBSDのSTABLEまたはRELEASEリリースに含まれていませんが、現在存在することが報告されています。
grep
FreeBSD派生バージョンのMacOSに含めるには、bsdgrep
Appleにお問い合わせください。 ☺
追加読書
- ジョナサン・デ・ボイン・ポラード(2017-10-15)。複数のスキーマが提供されると、bsdgrepが正しく動作しません。バグ #223031. FreeBSD バグジラ。
- カイル・エヴァンス(2017-04-03)。bsdgrep: マッチ動作の修正。リビジョン316477。FreeBSDソースコード。
- カイル・エヴァンス(2017-05-02)。bsdgrep: 一部のパターンと -w -v の不一致を修正 。リビジョン317665。FreeBSDソースコード。
- ネイサン・ウィックス(2014-06-16)。grep(1) と bsdgrep(1) は [[:<:]] と [[:>:]] を認識しません。。バグ #191086. FreeBSD バグジラ。