Qual é a diferença entre expressões regulares e literais em FINDSTR?

1

Qual é a diferença entre /R e /C ?

FINDSTR [options] [/F:file] [/C:string] [/G:file]
        [/D:DirList] [/A:color] [/OFF[LINE]] [string(s)] [pathname(s)]

/C:string   Use string as a literal search string.
/R          Use string as a regular expression.

Q:\>dir
 Volume in drive Q is New Volume
 Volume Serial Number is 3AB5-2465

 Directory of Q:\

16-10-2014  09:34             3,072 keyspaceword.exe
16-10-2014  09:34             3,072 keyword.main1.xml
16-10-2014  09:34             3,072 keyword.main2.jpeg
16-10-2014  09:34             3,072 keyword.main3.exe
16-10-2014  09:34             3,072 keywordandmore.exe
16-10-2014  09:34             3,072 somethingkeyword.exe
24-09-2014  09:35    <SYMLINKD>     symlink1 [Q:\IIM\NOEXTNS]
               6 File(s)         18,432 bytes
               1 Dir(s)   7,180,222,464 bytes free

Q:\>dir | findstr /c:keyword
16-10-2014  09:34             3,072 keyword.main1.xml
16-10-2014  09:34             3,072 keyword.main2.jpeg
16-10-2014  09:34             3,072 keyword.main3.exe
16-10-2014  09:34             3,072 keywordandmore.exe
16-10-2014  09:34             3,072 somethingkeyword.exe

Q:\>dir | findstr /r /c:keyword
16-10-2014  09:34             3,072 keyword.main1.xml
16-10-2014  09:34             3,072 keyword.main2.jpeg
16-10-2014  09:34             3,072 keyword.main3.exe
16-10-2014  09:34             3,072 keywordandmore.exe
16-10-2014  09:34             3,072 somethingkeyword.exe

Eu pensei em obter apenas 3 arquivos com / c: keyword (desde keywordandmore.exe, somethingkeyword.exe) não são correspondências literais para a palavra-chave direita?

Alguém pode explicar com um exemplo que destaque a diferença entre os dois? Eu pesquisei aqui , mas ainda não tenho certeza se meu entendimento está correto.

Acho que encontrei a diferença, mas ainda não tenho nenhuma explicação sobre o motivo de isso acontecer? E quanto a outros meta-personagens que eu possa precisar escapar?

Q:\>dir | findstr /r /c:keyword.
16-10-2014  09:34             3,072 keyword.main1.xml
16-10-2014  09:34             3,072 keyword.main2.jpeg
16-10-2014  09:34             3,072 keyword.main3.exe
16-10-2014  09:34             3,072 keywordandmore.exe
16-10-2014  09:34             3,072 somethingkeyword.exe

Q:\>dir | findstr /c:keyword.
16-10-2014  09:34             3,072 keyword.main1.xml
16-10-2014  09:34             3,072 keyword.main2.jpeg
16-10-2014  09:34             3,072 keyword.main3.exe
16-10-2014  09:34             3,072 somethingkeyword.exe
    
por Dhiwakar Ravikumar 16.10.2014 / 06:40

1 resposta

1

Nas expressões regulares, . corresponde a qualquer caractere.

Assim, o padrão de pesquisa keyword. corresponde a keyworda no nome do arquivo keywordandmore.exe Essa é a razão para a disparidade.

Para mais informações sobre expressões regulares, consulte aqui .

    
por 16.10.2014 / 07:04