我正在使用以下资源: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]
我做了一些谷歌搜索和手册页(和此处),但是我看不到它在做什么,或者它是如何工作的。
谁能指出我一个体面的资源,以便我可以阅读它,或告诉我它如何工作?
答案 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
中搜索所有可见文件和*
不可见文件。