Answers:
使用-l
或--files-with-matches
选项,其说明如下:
抑制正常输出;而是打印通常会从中打印输出的每个输入文件的名称。扫描将在第一个匹配项时停止。(
-l
由POSIX指定。)
因此,您可以使用以下示例:
$ grep check * -lR
grep -rl "text to find" "/usr/share"
,效果很好!
find . -type f -exec grep -l check {} +
您可能不想使用在降级目录时-R
GNU的现代版本grep
遵循符号链接的选项。请从-r
那里使用选项,因为自版本2.12(2012年4月)起,该选项不再遵循符号链接。
如果您的grep不是GNU版本或早于2.12版本,或者您需要将代码移植到非出血边缘GNU系统,请使用find
上面的命令。
否则,您可以执行以下操作:
grep -rl check .
请勿使用*
(因为这会忽略当前目录(仅在当前目录中)的隐藏文件,并且会导致名称以开头的文件出现问题-
),请避免在参数后传递选项,因为这不能保证可以正常工作,具体取决于环境,不是便携式的。
尝试这个:
find . -type f | xargs grep -c check $1 | grep -v ":0"
至于grep
标志...
-c
将返回一个文件名,后跟:和一个数字,该数字指示搜索字符串出现在给定文件中的次数。
-v
将从第一次grep
搜索中获取输出,过滤出结果为零的文件,并仅打印结果为非零的文件。
:0
。最好做grep -v ':0$'
。即使那样也会阻塞包含换行符的路径名。
grep -rin“ whatToFind” locationToFInd
例如$ grep -rin“ vihaan”。
将递归搜索并列出文件名以及其中带有“ vihaan”的对应行“。”。指当前目录。
find . -type f | grep "keyword" *
在当前目录中搜索。要从根目录查找,请指定/
而不是.
grep -lR "text-to-find" <where-to-find>
也可以。
例如, grep -lR "NAVIGATE" .
我们在当前目录NAVIGATE
中的哪里找到单词.
。