"ls -a | grep^\."の奇妙な動作

"ls -a | grep^\."の奇妙な動作

パスワードの内容をリストし、ドットで始まるファイルのみを表示したいと思います。試してみましたが、ls -a | grep ^\.なぜ出力にドットで始まらないファイルも含まれているのはわかりません。たとえば、

Pictures
.pip
.pki
.profile
projects
Public

私は私が望むことを達成できることを知っていますが、ls -ld .*説明できないgrepの動作が気になるだけです。

答え1

パラメータを引用符grepで囲むls -a | grep '^\.'

その理由は、シェルが\.それを処理して再び一般に変換してから、単一.文字grepのワイルドカードとして処理するためです。疑わしい場合は、必ずシェル固有の文字を含む(または含めることができる)文字列を引用してください。

答え2

grep正規表現を引用符で囲む必要があります。

ls -a | grep '^\.'

メモ:lsコマンドの出力を解析しません。

答え3

cmdを実行するとls -a | grep ^\。これにより、grepは「\」を特殊文字として扱わず、「.」の意味はエスケープされません。

cmdを使用するときls -a | grep "^\."その後、grepは「\」を特殊文字として扱い、「.」の意味をエスケープします。それはあなたに期待される結果を与えるでしょう。

引用符なしでgrep cmdを使用するには、「\」文字もエスケープする必要があります。次のコマンドを使用すると、二重引用符なしで期待される結果を得ることができます。 ls -a | grep ^\\。

正規表現における特殊文字の意味の詳細については、次のリンクを参照してください。 http://www.regular-expressions.info/quickstart.html

関連情報