grep .*は.bash_historyの結果を返し、文句を言います。

grep .*は.bash_historyの結果を返し、文句を言います。

私は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

これにより、ファイルの行が印刷されます。

関連情報