我有一堆文件:有些包含单词star
,有些包含单词start
,有些包含两者。
我想复制包含单词star
但不包含单词start
的文件。
仅使用grep如何实现?
答案 0 :(得分:1)
grep
提供了一些用于在行或文件级别反转匹配项的选项。您需要使用-L
开关的后一种选项。以下将打印不不包含文本start
的文件夹中所有文件的名称:
grep -LF start *
-F
告诉grep start
是文字字符串,而不是正则表达式。这里是可选的,但可能会加快速度。
您可以使用结果列表来搜索包含star
的文件:
grep -lF star $(grep -LF start *)
-l
仅打印包含匹配项的文件名,而不打印任何逐行或逐项匹配的详细信息。如果这不是您想要的,man grep
是您的朋友。
这使用附加的shell构造来运行反向匹配,但是从技术上讲,它不会调用任何非grep
的附加程序。
更新
由于您提到要浏览从给定根文件夹开始的所有文件,因此请将-LF
更改为-LFr
。如果您不想更改工作目录,请用根文件夹替换*
。
-r
告诉grep
递归到目录中,并搜索沿途找到的每个文件。
答案 1 :(得分:0)
使用-w
的GNU grep:
$ cat file
foo star bar
oof start rab
$ grep -w star *
foo star bar
或者如果您只想要包含star
的文件名:
$ grep -lw star *
file
并仅查找要查找的文件:
$ find . -maxdepth 1 -type f -exec grep -w 'star' {} \;
foo star bar