Se eu fizer:
$ ls -R
.:
4Shared/ Cloud/
./4Shared:
UFAIZLV2R7.part3.rar
./Cloud:
UFAIZLV2R7.part2.rar.part
UFAIZLV2R7.part1.rar.part
UFAIZLV2R7.part4.rar.part
Se eu quiser listar .rar
apenas os arquivos e usar grep , ele também mostrará os .rar.part
arquivos, o que não é o meu desejo.
Estou resolvendo isso usando find
ou ls **/*.rar
conforme descrito neste tópico e eles funcionam bem, mas gostaria de saber se é possível fazer isso via grep
.
Eu tentei (pensando sobre EOL
):
ls -R | grep ".rar\n"
sem resultados.
Eu acho que o problema está em descobrir se o greping é encontrado no final da linha , mas não tenho certeza.
Alguma ajuda aqui, por favor?
grep
neste caso? Por que nãofind
?find
comando está em conflito com o Windows) e ... aprendendo ;-). A questão não é sobre "Arquivos de Listagem em um dir" (que é apenas um exemplo costume), mas sim "Compreender o uso do comando grep"ls -1R
.grep
. Veja minha resposta.-1R
chave. Aparentemente, os resultados são os mesmos.Respostas:
A
$
âncora corresponde ao final de uma linha.Você também pode usar
find
para isso:fonte
Além da sua pergunta, observe que
.rar
não apenas corresponde a ".rar", mas também a todos os caracteres (inclusive.
) antes dorar
. Nesse caso, provavelmente não é um problema, mas.
deve ser escapado em regexes.fonte
.asc
é como*asc
padrão? Por isso, corresponderá, por exemplowhereverasc
,.xrar
.Você também pode instruir
grep
a procurar sua string começando em um limite de palavras. A.
é um desses limites.Exemplo
Digamos que eu tenho esses dados de amostra.
Este comando encontraria apenas o arquivo com a
.rar
extensão.Como isso funciona?
Situações em que isso não funcionará
Se você tiver arquivos nomeados,
blah-rar
esses também serão detectados.Isso ocorre porque caracteres que não sejam alfanuméricos são normalmente considerados caracteres de limite e, portanto, passariam por essa abordagem.
fonte
"
vez de aspas simples?.rar
. Mas estes não serão um problema com o uso dels -R
. Somente se você tiver usadols -Ra
.-P
opção paragrep
no meu exemplo. Isso desencadeia a interpretação PCRE do argumento.\n
), que é um caractere legal. Ols -1R
forçará os arquivos a serem exibidos em uma única coluna independentemente.Apenas faça :
Você não precisa de
grep
nada.NOTA: O acima funciona ... exceto que ainda recebe pelo menos
afile-rar
e eu não entendo o porquê. Vou deixar aqui, mas não tenho orgulho disso. De qualquer forma, como outros já disseram:fonte
xrar
ouafile-rar
.afile-rar
exrar
ainda estão sendo incluídos na saída. Nenhuma alteração nos seus mods mais recentes também. Problema traquina não? É divertido tentar resolvê-lo sem os métodos regulares 8-)-dash
. Axrar
coisa que eu poderia segurar, mas não o-dash.
que eu não entendo o-dash.
Use aspas simples para fazer o $ funcionar como fim de linha. Se você deseja grep com alguma variável também, use a combinação de aspas duplas e simples como abaixo:
Minha postagem anterior foi excluída, dizendo que é duplicada. Deixe-me explicar como isso é diferente.
As outras postagens mencionam o uso completo de aspas duplas
""
ou o uso completo de aspas simples''
. Ambos têm suas próprias limitações. A seguir explica.O problema com todas as aspas duplas é o seguinte:
grep "pattern$"
fornece o seguinte erro:Illegal variable name.
E usar todas as aspas simples funciona, mas se você deseja substituição de variável, todas as aspas simples não funcionarão. Por exemplo:
Se eu tiver uma string
A_BOOK
, incluindo outras strings em um arquivo FILE.Se eu definir o BOOK como uma variável BK
Se eu grep com todas as aspas duplas, recebo o seguinte erro::
grep "${BK}$" FILE*
1st $ para substituição de variável, 2nd para final de padrão ( nome ilegal da variável ).Se eu grep com todas as aspas simples, a substituição da variável não acontece.
grep '${BK}$' FILE
não retorna nadaSe eu usar uma combinação de aspas duplas e simples, recebo o que espero. Aspas duplas para substituição de variável e as aspas simples para o final do padrão.
fonte
"foo$"
sintaxe funciona bem com sh e family.Se depois de seguir o descrito acima e nada funcionar, pode ser devido ao final da linha. Para corrigir, faça:
dos2unix pr0n.txt
e faça o seugrep
novamente.fonte