私のボックスには、Windowsシステムのいくつかのデータベースダンプがあります。テキストファイルです。私はそれらをgrepするためにcygwinを使用しています。このファイルはプレーンテキストファイルのようです。メモ帳やワードパッドなどのテキストエディタで開きましたが、きれいに見えました。しかし、grepを実行するとbinary file foo.txt matches
。
NUL
私はこれらのファイルにデータベースダンプの成果物であると仮定するいくつかのASCII文字が含まれていることを発見しました。
それでは、grepがこれらのファイルがバイナリだと思うのはなぜですか?数値NUL
?ファイルシステムにフラグがありますか? grepで行の一致を表示するには何を変更する必要がありますか?
答え1
NUL
ファイルに文字が含まれている場合、grepはそれをバイナリファイルとして扱います。
このような回避策があるかもしれませんcat file | tr -d '\000' | yourgrep
。まず、すべてのNULL値を削除してからファイルを検索してください。
答え2
grep -a
私のために働く:
$ grep --help
[...]
-a, --text equivalent to --binary-files=text
答え3
このstrings
ユーティリティを使用すると、すべてのファイルからテキストコンテンツを抽出し、grep
次のようにパイプできますstrings file | grep pattern
。
答え4
私のテキストファイルの1つは突然grepによってバイナリファイルとして扱われます。
$ file foo.txt
foo.txt: ISO-8859 text
解決策は、次のように変換することですiconv
。
iconv -t UTF-8 -f ISO-8859-1 foo.txt > foo_new.txt