Usando expansão de chaves

Usando expansão de chaves

Então, basicamente, quero adicionar essas duas linhas cmd juntas

ls *[Aa]* 
ls *[Bb]*

Estou procurando um arquivo que contenha A e B (minúsculas ou maiúsculas) e que possam aparecer mais de uma vez.

Aqui está o que eu tentei:

ls *[Aa]*&&*[Bb]*

Responder1

Usando expansão de chaves

Um método é usar a expansão de chaves. Vamos considerar um diretório com estes arquivos:

$ ls
1a2a3  1a2b3  1b2A3  1b2b3

Para selecionar aqueles que possuem ambos ae bem ambos os casos:

$ ls *{[bB]*[aA],[aA]*[bB]}*
1a2b3  1b2A3

Melhoria

Um possível problema é como a expansão de chaves se comporta se uma das opções não tiver arquivos correspondentes. Considere um diretório com estes arquivos:

$ ls
1a2a3  1b2A3  1b2b3

Agora, vamos executar nosso comando:

$ ls *{[bB]*[aA],[aA]*[bB]}*
ls: cannot access '*[aA]*[bB]*': No such file or directory
1b2A3

Se não gostarmos dessa mensagem de aviso, podemos definir nullglob e ela desaparecerá:

$ shopt -s nullglob
$ ls *{[bB]*[aA],[aA]*[bB]}*
1b2A3

Porém, uma limitação dessa abordagem é que, se nenhum dos glob corresponder, ele lsserá executado sem argumentos e, conseqüentemente, listará todos os arquivos.

Usando globs estendidos

Vamos considerar novamente um diretório com estes arquivos:

$ ls
1a2a3  1a2b3  1b2A3  1b2b3

Agora vamos definir extglob:

$ shopt -s extglob

E vamos usar um glob estendido para encontrar nossos arquivos:

$ ls *@([bB]*[aA]|[aA]*[bB])*
1a2b3  1b2A3

Responder2

Se você não se importa em pedir grepajuda então

ls *[aA]* | grep -i b

também servirá.

informação relacionada