Existe uma maneira de usar expressões regex para preencher nomes de arquivos automaticamente no bash?

5

Supondo que eu tenha um diretório com arquivos, conforme mostrado:

$ ls
file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt someotherfile.txt

Digamos que eu queira executar o seguinte comando:

$ cat file0001.txt file0002.txt file0003.txt file0004.txt file0005.txt 

Eu poderia conseguir isso usando um atalho bash da seguinte forma para preencher automaticamente os nomes dos arquivos: cat file000 ESC *

Agora seria possível usar um atalho de maneira semelhante para somente preencher automaticamente de acordo com alguma regex (expressão regular)? Por exemplo: cat file000[1-3] ESC * para obter:

$ cat file0001.txt file0002.txt file0003.txt

Edit: o regex que eu deveria ter usado acima para este exemplo para fazer mais sentido: file000[1-3].txt ou file000[1-3]*

Só para deixar claro, minha pergunta é sobre como preencher automaticamente no bash com regex. E NÃO como eu posso cat alguns arquivos juntos usando um script bash ou for / while declarações usando regex.

    
por moo 07.04.2016 / 04:41

1 resposta

6

O recurso que você está procurando está lá. Está faltando apenas um * em seu exemplo. Digite cat file000[1-3]* ESC * e isso deve funcionar. Eu acho que este é o caso porque a função readline insert-completions (que é limitada a ESC * ) não expandirá o padrão glob se ele não corresponder a nenhum arquivo. E sem o último * ele não corresponde aos arquivos.

Você pode ler sobre isso na página do manual , seção "EXPANSÃO", subseção "Expansão do nome do caminho".

    
por 07.04.2016 / 08:37