Linux GREP显示包含文本和不包含文本的文件
我正在尝试搜索具有特定文本的文件,但排除了特定文本并仅显示文件 这是我的密码:Linux GREP显示包含文本和不包含文本的文件,linux,unix,grep,Linux,Unix,Grep,我正在尝试搜索具有特定文本的文件,但排除了特定文本并仅显示文件 这是我的密码: grep -v "TEXT1" *.* | grep -ils "ABC2" 然而,它返回: (标准输入) 请建议。非常感谢 输出应仅显示文件名 (standard input) 此错误是由于在管道中使用了grep-l,因为您的第二个grep命令正在从stdin而不是从文件读取输入,-l选项正在打印(标准输入),而不是文件名 您可以在单个awk命令中使用此替代解决方案: a
grep -v "TEXT1" *.* | grep -ils "ABC2"
然而,它返回:
(标准输入)
请建议。非常感谢
输出应仅显示文件名
(standard input)
此错误是由于在管道中使用了grep-l
,因为您的第二个grep命令正在从stdin而不是从文件读取输入,-l
选项正在打印(标准输入)
,而不是文件名
您可以在单个awk
命令中使用此替代解决方案:
awk'/ABC2/&&/TEXT1/{print FILENAME;nextfile}'*.*2>/dev/null
此错误是由于在管道中使用了grep-l
,因为您的第二个grep命令正在从stdin而不是从文件读取输入,-l
选项正在打印(标准输入)
,而不是文件名
您可以在单个awk
命令中使用此替代解决方案:
awk'/ABC2/&&/TEXT1/{print FILENAME;nextfile}'*.*2>/dev/null
这里有一种方法,假设您希望在文件中的任何位置匹配这些术语
grep-LZ'TEXT1'*.*xargs-0 grep-li'ABC2'
将匹配不包含给定搜索词的文件-L
- 如果您想匹配
而不考虑大小写,请使用文本1
-LiZ
- 如果您想匹配
- 需要使用
选项以NUL字符分隔文件名,然后-Z
将根据NUL字符分隔文件名xargs-0
如果要在同一行而不是在文件中的任何位置检查这两个条件:
grep-lP'^(?。*TEXT1.*(?i:ABC2)')**
启用PCRE,我假设您已经启用了PCRE,因为-P
被标记linux
是一个负的先行结构,因此(?!regexp)
将确保该行没有^(?。*TEXT1)
TEXT1
将不敏感地匹配(?i:ABC2)
大小写ABC2
- 如果要匹配这两个术语,而不考虑大小写,请使用
grep-liP'^(?。*TEXT1.*ABC2'
grep-LZ'TEXT1'*.*xargs-0 grep-li'ABC2'
将匹配不包含给定搜索词的文件-L
- 如果您想匹配
而不考虑大小写,请使用文本1
-LiZ
- 如果您想匹配
- 需要使用
选项以NUL字符分隔文件名,然后-Z
将根据NUL字符分隔文件名xargs-0
如果要在同一行而不是在文件中的任何位置检查这两个条件:
grep-lP'^(?。*TEXT1.*(?i:ABC2)')**
启用PCRE,我假设您已经启用了PCRE,因为-P
被标记linux
是一个负的先行结构,因此(?!regexp)
将确保该行没有^(?。*TEXT1)
TEXT1
将不敏感地匹配(?i:ABC2)
大小写ABC2
- 如果要匹配这两个术语,而不考虑大小写,请使用
grep-liP'^(?。*TEXT1.*ABC2'
TEXT1
的文件名,还是在其内容中不包含TEXT1
的文件?请查看以下内容:您好,我正在查找不包含TEXT1且包含ABC2Thank的文件。。但是,grep只需要显示文件名..这是有效的:grep-P'(?=^((?!bar)。*)*$)foo'。。。输出文件名:找到术语。如果有必要,你可以把它切碎。我不明白你的第一句话。你能重新措辞吗?您正在查找不包含TEXT1
的文件名,还是在其内容中不包含TEXT1
的文件?请查看以下内容:您好,我正在查找不包含TEXT1且包含ABC2Thank的文件。。但是,grep只需要显示文件名..这是有效的:grep-P'(?=^((?!bar)。*)*$)foo'。。。输出文件名:找到术语。如果需要的话,你可以把它切碎。你的解决方案有效。也谢谢你的解释:)非常感谢sundeep。你的解决方案有效。另外,也感谢您的解释:)非常感谢您分享美好的代码先生,您能告诉我为什么我们需要*.
?这里不能只使用*
?如果您能解释这一点,我将不胜感激。我使用了*.
,因为OP也有它,假设文件名中的扩展名为
。好的,如果是*
文件,则不会拾取
?抱歉,还没有测试它。带有
的文件也将只使用*
拾取,但它也会拾取目录,而*.
的限制更严格,仅匹配具有扩展名的文件名。感谢您共享漂亮的代码,先生,您能告诉我为什么我们需要*
吗?这里不能只使用*
?如果您能解释这一点,我将不胜感激。我使用了*.
,因为OP也有它,假设文件名中的扩展名为
。好的,如果是*
文件,则不会拾取
?抱歉,尚未对其进行测试。带有
的文件也将仅使用*
拾取,但它也将拾取目录,而*.
对仅匹配扩展名的文件名的限制更大。