列出所有不包含2个不同字符串的文件
我有一个 dir ,其中有多个文件以模式命名,例如 file1.txt
我可以列出所有不包含一个字符串的文件
grep -l "String" file*
如何列出不包含我尝试的两个字符串的文件?
grep -l "string1|string2" file*
答案 0 :(得分:4)
您需要参数e
用于grep,或使用egrep。
使用egrep:
egrep -L "string1|string2" file*
答案 1 :(得分:1)
假设您只想打印包含所有字符串的文件的名称,这里的解决方案适用于任意数量的字符串,并且将进行字符串比较,而不是正则表达式比较:
gawk -v RS='\0' -v strings="string1 string2" '
BEGIN{ numStrings = split(strings,stringsA) }
{
matchCnt = 0
for (stringNr=1; stringNr<=numStrings; stringNr++)
if ( index($0,stringsA[stringNr]) )
matchCnt++
}
matchCnt == numStrings { print FILENAME }
' file*
坚持,我只是注意到您要打印不包含2个字符串的文件。那将是:
gawk -v RS='\0' -v strings="string1 string2" '
BEGIN{ numStrings = split(strings,stringsA) }
{
matchCnt = 0
for (stringNr=1; stringNr<=numStrings; stringNr++)
if ( index($0,stringsA[stringNr]) )
matchCnt++
}
matchCnt == numStrings { matchesAll[FILENAME] }
END {
for (fileNr=1; fileNr < ARGC; fileNr++) {
file = ARGV[fileNr]
if (! (file in matchesAll) )
print file
}
}
' file*
要打印不包含字符串的文件的名称,请执行以下操作:
gawk -v RS='\0' -v strings="string1 string2" '
BEGIN{ numStrings = split(strings,stringsA) }
{
for (stringNr=1; stringNr<=numStrings; stringNr++)
if ( index($0,stringsA[stringNr]) )
matchesOne[FILENAME]
}
END {
for (fileNr=1; fileNr < ARGC; fileNr++) {
file = ARGV[fileNr]
if (! (file in matchesOne) )
print file
}
}
' file*