pergunta padrão bash

3

Eu tenho arquivos em um diretório com nomes de arquivos que possuem dígitos, e alguns deles terminam com um caractere 'd' (não necessariamente uma extensão). Aqui está um conjunto de exemplos de arquivos:

alle5m6ilsd.d
alle34mails
alle34mailsd
allemails
allemails.d

Eu quero escrever o comando bash do UNIX para selecionar nomes de arquivos com dígitos e terminar com um 'd'. Então minha resposta deveria ser:

alle5m6ilsd.d 
alle34mailsd 
    
por KPeeris 06.02.2017 / 04:07

2 respostas

3

Você pode usar o padrão glob:

*[[:digit:]]*d
  • * corresponde a zero ou mais caracteres

  • [:digit:] corresponde a qualquer dígito no seu locale

  • d corresponde ao literal d , no final aqui

Se você não quiser depender do seu locale , somente para o conjunto de caracteres ASCII:

*[0-9]*d

Exemplo:

% ls               
alle34mails  alle34mailsd  alle5m6ilsd.d  allemails  allemails.d

% ls *[[:digit:]]*d
alle34mailsd  alle5m6ilsd.d
    
por 06.02.2017 / 04:17
0

O padrão corrigido deve ser:

*[[:digit:]].*d$

ou

*[0-9].*d$

Adicionando à descrição do heemayl, só precisa corresponder um dígito para que a parte dos requisitos do OP seja atendida. Em seguida, precisa aceitar qualquer número de outros caracteres após o dígito .* , que pode incluir outros dígitos. Então tem que ter um literal d , mas ele deve estar ancorado ao final da string $ . O padrão de heemayl não corresponderia a ambos os exemplos do OP e corresponderia falsamente a qualquer coisa com d diretamente após os dígitos, não necessariamente no final, conforme as condições do OP.

    
por 06.02.2017 / 07:07