expressão regular para capturar o nome da pasta com estrutura específica

0

qual é a expressão regular para capturar o nome da pasta com essa estrutura

x.x.x.x-x (x - número inteiro)

 ls /usr/hdp | .....
 2.6.0.3-8  current HG_MASTER 2.4.3 34.1 45-995

saída esperada

2.6.0.3-8



ls -lh /usr/hdp/
total 8.0K
drwxr-xr-x. 27 root root 4.0K Jan  1 15:24 2.6.0.3-8
    
por jango 22.01.2018 / 10:41

4 respostas

1

Desde que você marcou , você pode realmente fazer isso com o shell correspondência de nome de arquivo, usando globs estendidos:

$ shopt -s extglob
$ touch /some/path/{2.6.0.3-8,22.66.0.333-8,foobar}
$ printf "%s\n" /some/path/+([0-9]).+([0-9]).+([0-9]).+([0-9])-+([0-9])
/some/path/22.66.0.333-8
/some/path/2.6.0.3-8

O padrão funciona como coisas mais comuns, como * ou *.png , para que você possa colocar as partes fixas como caminhos. Adicione uma barra à direita / para corresponder apenas aos diretórios. (a barra aparece na saída também.)

Em ERE regex, o padrão é o mesmo que [0-9]+\.[0-9]+\.[0-9]+\.[0-9]+-[0-9]+ . Uma versão mais difusa seria apenas verificar os caracteres permitidos, como +([-.0-9]) (ou [-.0-9]+ em ERE), mas isso também corresponderia, por exemplo, 123..456 .

Se você quiser apenas imprimir os nomes de arquivos, find pode ser mais fácil, mas se você quer executar um comando neles, então um loop de shell também é uma opção (junto com find -exec ).

    
por 22.01.2018 / 12:34
1
find . -type d -regextype posix-egrep -regex '^./([0-9]+[.]){3}[0-9]+[-][0-9]+'

Use find e, em seguida, o sinalizador regextype para definir a sintaxe da expressão reg para egrep. Use -regex para verificar contra 3 dígitos e um "ponto" e, em seguida, um dígito um "traço" e um dígito.

Se os dígitos tiverem mais de um caractere, você precisará de + após cada dígito.

    
por 22.01.2018 / 11:15
1

Você precisa usar find . Para o padrão de uso de correspondência exata:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*-[0-9]*"

Se você precisar de arquivos com apenas dígitos , . e - símbolos em nomes, tente:

find /usr/hdp -regextype sed -regex "\/usr\/hdp\/[.0-9-]*"
    
por 22.01.2018 / 11:14
-1
ls /usr/hdp | egrep '[0-9]+.[0-9]+.[0-9]+.[0-9]+-[0-9]+'
    
por 22.01.2018 / 10:48