グレブフィルターの使用

グレブフィルターの使用

次の2行を含む「hello.txt」というテキストファイルがあります。

Hello WORLD!
Hallo world!

私が次を書くとき

grep -i h[ae]llo hello.txt 

端末では出力がありません。 2行が印刷されると予想されます。

答え1

ある種の文字セットの問題が原因で正しく機能しない可能性があります。grep役に立つ次のコマンドのいくつかを使用して、成功した使用法を再現できる必要があります。

まず、文字セットの問題を避けるために、端末でテキストファイルを作成しましょう。

echo -e "Hello\nHallo" > foo.txt

このフラグは、リテラルシーケンスの代わりに改行文字を解釈したいと-e知らせます。これは私たちに2行を与えます。以下のようにファイルにアクセスして問題なく表示できるはずです。echo\ncat

cat foo.txt
Hello
Hallo

これで、以前に公開したコマンドを使用できますgrep。 (実際には引用符は必要ありませんが、bashには特殊文字があるので使用する必要があります。また、二重引用符ではなく一重引用符を使用してください)

grep -i 'h[ae]llo' foo.txt

これにより、期待される結果が生成されます。これがうまくいきますが、他のテキストファイルに何が起こっているのか疑問に思っている場合は、何が起こっているのかを理解するためにできることがいくつかあります。

まず、fileファイルに対してコマンドを実行してみてください。これはこれがテキストファイルであり、エンコード方法を教えてくれます。

file foo.txt
foo.txt: ASCII text

何か奇妙な、または別の文字エンコーディングを取得すると問題になる可能性があります。また、ファイルの16進ダンプを確認することもできます。

16進ダンプ-C foo.txt

00000000  48 65 6c 6c 6f 0a 48 61  6c 6c 6f 0a              |Hello.Hallo.|
0000000c

または、次のブラウザ内のLinuxエミュレータを使用して問題を解決するのに役立ちます。

http://bellard.org/jslinux/

GCCもあり、Cコードをコンパイルできます!

関連情報