Alguém pode me explicar a substring bash? [duplicado]

2

Eu estou bastante familiarizado com expressões regulares em vários contextos, mas a correspondência de substring bash me confunde. Alguém pode, por favor, explicá-los para mim, idealmente com alguns exemplos? Os exemplos que encontrei no google são muito simples e sugerem correspondência de regex bastante genérica (se limitada), mas quando tento usá-los em situações práticas, isso nunca funciona. Do meu entendimento, a correspondência de substring deve funcionar da seguinte maneira:

result=${string##pattern}

encontrará a subseqüência mais longa de 'string', começando do início, que corresponde ao 'padrão'. Ele remove essa correspondência de 'string' e coloca o restante em 'result'. Mas considere:

temp=${myvar##[^0-9]*} && echo $temp

Até onde eu sei, meu padrão deve corresponder a 'zero ou mais caracteres que não são dígitos' - a maior correspondência desse tipo desde o início da string. Então tome como exemplo:

myvar=my_file_123_45.txt

Devo esperar que os caracteres 'my_file_' sejam correspondidos: essa é a maior combinação de caracteres do início da 'string' que não são dígitos. Em vez disso, o resultado retornado está vazio! Tudo fica combinado! O que aconteceu com a exclusão de dígitos ?! Em ambos os gedit (usando o mecanismo regex search-and-replace), e nas ferramentas regex do Labview, o padrão de correspondência

pattern=^[^0-9]*

que eu acredito ser equivalente, resulta na minha correspondência esperada - 'my_file_'. O que há de diferente no Bash?

    
por marcus 27.02.2017 / 07:25

1 resposta

1

Você precisa entender que a correspondência da subestação de Bash NÃO faz uso de regexes. . Em vez disso, usa wildcard expansion em conjunto com ### %%% para ver as correspondências mais curtas e mais longas e de qualquer direção.

No seu caso específico de querer pegar os primeiros dígitos, você pode usar o seguinte estratagema:

echo "${myVar%%[0-9]*}"; # delete upto the leftmost digit starting from right

saída

my_file_

Eu acho o seguinte site: http://www.tldp.org/LDP/abs/html/parameter-substitution.html especialmente útil para todos os assuntos relacionados ao parâmetro Bash.

    
por 27.02.2017 / 07:51