Existem várias maneiras de fazer o que você deseja. Este apenas remove o ponto decimal e tudo depois do número da versão:
VERSION=$(sed 's/\..*//' /etc/debian_version)
\..*
significa um período ( \.
) seguido por zero ou mais de qualquer caractere ( .*
). Assim, para sed
, a expressão s/\..*//
significa substituir o período e tudo o que se segue com nada. O resultado do comando sed
é salvo na variável de ambiente VERSION
.
O acima elimina a necessidade das declarações if / then / elif /.../ fi. Ele funcionará com o bash e o ordinário / bin / sh.
MORE: sed
é um editor de fluxo: isso significa que ele lê linhas de stdin, edita-as conforme as instruções e (normalmente) as envia para stdout. Neste caso, estamos dando uma instrução "substituta". Por exemplo, s/foo/bar/
significa localizar a primeira ocorrência de foo e substituí-la por bar. Como um caso especial, s/foo//
significa substituir foo
por nada. No nosso caso, queremos substituir um período seguido por qualquer caractere com nada. Agora, um período é "." exceto que sed
normalmente trata um período para significar "qualquer caractere". Então, precisamos "escapar" colocando uma barra invertida à frente. Quando sed
vê \.
, sabe que nos referimos a um período literal. Também queremos apagar todos os caracteres após o período. Para representar "qualquer personagem", usamos um período .
(sem escape). Para ser geral, no entanto, queremos excluir todos os caracteres após o período, independentemente de quantos existem. Então, enquanto na linguagem sed
, um período significa qualquer caractere, a estrela significa "qualquer número do caractere precedente" (que pode ser zero). Assim, a estrela do período .*
significa zero ou mais de qualquer caractere. Então, colocando tudo junto, s/\..*//
diz a sed
que, se encontrar um período, possivelmente seguido por qualquer coisa, substitua-o por nada.