“ls -a | grep ^\.”的奇怪行为

“ls -a | grep ^\.”的奇怪行为

我想列出密码的内容并仅显示以点开头的文件。我尝试过ls -a | grep ^\.,但我无法弄清楚为什么输出还包含不以点开头的文件。例如:

Pictures
.pip
.pki
.profile
projects
Public

我知道我可以实现我想要的,ls -ld .*我只是对 grep 的这种行为感到好奇,我无法解释。

答案1

引用 的参数grep,因此ls -a | grep '^\.'

原因是 shell 处理\.并将其转回 plain .grep然后将其视为单字符通配符。如果有疑问,请始终引用包含(或可能包含)shell 特有字符的字符串。

答案2

您需要将 grep 正则表达式放在引号内。

ls -a | grep '^\.'

笔记:不解析ls命令的输出

答案3

如果执行cmdls -a | grep ^\.那么 grep 不会将“\”视为特殊字符和“.”的含义不要逃脱。

当我们使用cmd时ls -a | grep "^\."那么 grep 将“\”视为特殊字符和“.”的含义逃脱了。它会给你一个预期的结果。

如果你想使用不带引号的 grep cmd,那么你也应该转义“\”字符。通过以下命令,您可以获得不带双引号的预期结果。 ls -a | grep ^\\.

有关正则表达式中特殊字符含义的详细信息,请参阅以下链接。 http://www.regular-expressions.info/quickstart.html

相关内容