Remova dois pontos do final da linha

Remova dois pontos do final da linha

Preciso usar regex para remover todo o texto começando no final da linha e voltando dois pontos.

gtk2-2.24.22-2.fc20.x86_64

torna-se

gtk2-2.24.22-2

Esta é a saída de rpm -qaum arquivo de texto e preciso cortar o final.

Responder1

Vocêprecisaruma regex? Eu sei que esta é uma solução um pouco barata, mas expressões regulares não são uma solução para tudo.

Por exemplo, com manipulação de string Bash:

foo="gtk2-2.24.22-2.fc20.x86_64"
echo ${foo%.*.*} # strip the longest match from the last dot

Retorna gtk2-2.24.22-2.

Você pode chamar isso em um arquivo assim:

foo=$(head -1 file.txt)
echo ${foo%.*.*} > new-file.txt

Expressões regulares são boas para analisar algo desde o início, não de trás para frente, pois consomem de maneira "ganancioso" da esquerda para a direita. É possível, mas você precisa ser um pouco mais detalhado do que faria no Bash simples.

Observe que o que parece ser uma regex no Bash ( .*) não é uma expressão regular “real”. Em uma regex real, o ponto .representa todos os caracteres e *significa que o caractere anterior (grupo) é repetido de 0 a n vezes. No entanto, no Bash, o ponto .significa um ponto real e *é um curinga para todos os caracteres.

informação relacionada