次の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
\n
cat
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エミュレータを使用して問題を解決するのに役立ちます。
GCCもあり、Cコードをコンパイルできます!