私はLinuxに初めてアクセスし、これまでいくつかのユーティリティ、特にgrepユーティリティを使用してきました。私は次の内容を含む新しいファイル(「newfile」と呼ばれる)を作成することにしました。
Lady of the night,
I hold you close to me,
And everything is out of sight,
I think I'll be alright.
"grep .* newfile"と入力してgrepを介して実行しようとすると、ファイルの行のみが表示されると予想されますが、その最初の結果は次のとおりです。
grep: ..: Is a directory
以下は、完全な.bash_history(この記事を短くするために省略します)とnewfileの内容です。なぜですか?この問題を解決する方法はありますか?正規表現を変更する必要がありますか?
答え1
実験してみてください!走る
echo grep .* newfile
結果からどのような結論を出すことができますか? grepの最初の引数を引用符(一重引用符または二重引用符で囲む)すると、結果はどのように変更されますか?
この内容を直接知りたい場合はお読みください。パス名拡張のPOSIX仕様。さまざまな拡張についてすべてを知っていれば、すぐにシェルマスターになるでしょう:-)
答え2
シェルは正規表現として渡す*
のではなく、ユーザーのものを解釈します。grep
正規表現検索を使用するには、grep
「これは正規表現です」というオプションを渡す必要があります。私のインストールでは-e
.tryでしたgrep -e '.*' newfile
。
答え3
アスタリスク(.*)とファイル名(newfile)の前にドットを指定すると、grepにnewfileファイル内のパターンを見つけるように指示し、.\*
シェルは.\*
ディレクトリにドットファイルを含めるように拡張します。
おそらく次のようなものが欲しいでしょう。
cat newfile
これにより、ファイルの行が印刷されます。