列出所有不包含2个不同的字符串如何列出不包含两个不同的字符串
文件,我有一个DIR在图案如命名大量文件中的所有文件FILE1.TXT
我可以列出所有不包含一个字符串
grep -l "String" file*
如何列出文件不包含两个字符串我试过的文件?
grep -l "string1|string2" file*
列出所有不包含2个不同的字符串如何列出不包含两个不同的字符串
文件,我有一个DIR在图案如命名大量文件中的所有文件FILE1.TXT
我可以列出所有不包含一个字符串
grep -l "String" file*
如何列出文件不包含两个字符串我试过的文件?
grep -l "string1|string2" file*
假设你只想打印包含所有字符串的文件名,这里是一个将任何数量的字符串的工作,会做一个字符串比较,而不是常规的解决方案表达式比较:
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*
你的意思是使用'-L'选项('-l'显示文件,其内容* do *匹配给定的正则表达式)? – chepner 2013-02-15 21:45:22
如果一个文件只包含2个字符串中的一个,那么该文件的名称应该被打印或不打印?另外,如果string1包含“f.o”并且文件中存在字符串“flo”,那么应该将它视为匹配还是不匹配? – 2013-02-16 13:30:12
是的,我想列出不包含任何字符串的文件 – Paul33 2013-02-18 16:49:42