grepを使用すると、「」に含まれる文字列は無視されます。

grepを使用すると、「」に含まれる文字列は無視されます。

ファイルから文字列を検索しようとすると、結果に一重引用符で囲まれた文字列は含まれません。

たとえば、

grep -rn text folder/

結果には、次の文字列は含まれません。

'text'

何が間違っているのか教えてください。

アップデート:ちょうど新しいファイルでテストしましたがうまくいきます!特定のファイル(ルビーファイル)でのみ発生するようです。たぶんエンコーディングと関係がありますか?

ベストアンサー1

文字エンコーディングの問題がある可能性が高いです。 grepしたいファイルの文字エンコーディングがシステムのデフォルトエンコーディングと異なる場合があります。今日、Unixyシステムは通常デフォルトでUTF-8を使用しています。 UTF-8は7ビットASCIIと互換性がありますが、8ビットASCII拡張とは互換性がありません。アメリカの一般的な8ビットコードは次のとおりです。ISO 8859-1そしてWindows CP-1252。世界の他の場所でも何十もの使用されています。

grepすべての入力はデフォルトのシステムエンコーディングと見なされます。grepエンコーディングが異なるファイルの場合は、iconv次のコマンドを使用して変換します。

$ iconv -f iso8859-1 -t utf8 myfile.txt | grep something

私はこれがあなたの再帰例に非常に不便であることを知っていますが、より広いレッスンは、これが問題を解決する場合は、そのディレクトリツリーのすべてのテキストファイルをシステム文字エンコーディングと互換性があるように変換する必要があることです。 Windowsテキストエディタの互換性が必要な場合は心配しないでください。コードの編集に焦点を当てたほとんどのWindowsテキストエディタはUTF-8をサポートしていますが、Windows自体は現在UTF-16を使用しています。

別の可能性は、ファイルが二重引用符を使用することです。キーボードに入力する引用符は真の引用符(ASCII 39)ですが、一部のワードプロセッシングプログラムとテキストエディタではこれを丸引用符で置き換えます。U+2019この例では。

私は文字エンコーディングの問題を調査するためにファイルを閲覧するためにこのコマンドを使用するのが好きです。

$ od -t x1 < myfile.txt | less

さまざまな「hexdump」プログラムを使用できますが、データをリトルエンディアン形式の16ビット語で表示するなど、役に立たない作業を行うことがよくあります。しかし、odまともな16進ダンププログラムのように、印刷可能なテキスト表示列がないため、短いファイルに最適です。私はしばしば例をテストするのが簡単で単純化することから始めます。

おすすめ記事