此命令行做什么?

时间:2018-09-07 13:27:32

标签: bash command-line

我正在使用以下资源:https://cmdchallenge.com

在以下挑战:https://cmdchallenge.com/s/#/search_for_files_containing_string上,问题是:

Print all files in the current directory,
one per line (not the path, just the filename)
that contain the string "500".

当我跑步时:

ls -al

我得到了以下内容:

    total 36
drwxr-xr-x.  2 501 dialout 4096 Feb 10 21:08 .
drwxr-xr-x. 39 501 dialout 4096 Apr 18 19:04 ..
-rw-r--r--.  1 501 dialout  204 Apr 29 17:44 README
lrwxrwxrwx.  1 501 dialout   23 Feb 10 20:59 access.log -> ../../common/access.log
lrwxrwxrwx.  1 501 dialout   25 Feb 10 21:08 access.log.1 -> ../../common/access.log.1
lrwxrwxrwx.  1 501 dialout   25 Feb 10 21:08 access.log.2 -> ../../common/access.log.2

我尝试了几件事,然后查看了用户提交的解决方案,其中之一是:

ls *[^2]

我做了一些谷歌搜索和手册页(和此处),但是我看不到它在做什么,或者它是如何工作的。

谁能指出我一个体面的资源,以便我可以阅读它,或告诉我它如何工作?

2 个答案:

答案 0 :(得分:1)

让我先引用PesaThes对命令的作用的注释:

  

您要查找的参考文献位于手册中的pattern matching下。 *匹配任何字符串,[^2]匹配 2的任何字符。因此,该命令列出了所有未以2结尾的文件

现在,仅凭您的问题尚不清楚为什么这是解决问题的方法。但是,如果您查看文件包含的内容,您会发现确实access.log.2是唯一不包含字符串500的文件,并且也是唯一以2结尾的文件。 / p>

对于其他文件集,命令ls *[^2]很可能不会输出其中没有字符串500的所有文件,但是在这种情况下,对于那些特定文件,它会匹配正确的文件。例如,另一种解决方案

echo README; echo access.log; echo access.log.1

答案 1 :(得分:1)

那不是您问题的答案,正确的解决方法是

pip --version

$ grep -sl 500 * .* 跳过错误(由目录引起);仅-s个文件名;在l中搜索所有可见文件和*不可见文件。