Retire dos puntos del final de la línea

Retire dos puntos del final de la línea

Necesito usar expresiones regulares para eliminar todo el texto que comienza al final de la línea y retrocede dos puntos.

gtk2-2.24.22-2.fc20.x86_64

se convierte

gtk2-2.24.22-2

Esta es la salida de rpm -qaun archivo de texto y necesito cortar el final.

Respuesta1

necesidaduna expresión regular? Sé que esta es una solución un poco barata, pero las expresiones regulares no son una solución para todo.

Por ejemplo, con la manipulación de cadenas de Bash:

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

Devoluciones gtk2-2.24.22-2.

Puedes llamar eso en un archivo así:

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

Las expresiones regulares son buenas para analizar algo desde el principio, no desde atrás, ya que consumen de forma "codiciosa" de izquierda a derecha. Es factible, pero debes ser un poco más detallado de lo que podrías hacer en Bash simple.

Tenga en cuenta que lo que parece una expresión regular en Bash ( .*) no es una expresión regular "real". En una expresión regular real, el punto .representa todos los caracteres y *significa que el carácter (grupo) anterior se repite de 0 a n veces. Sin embargo, en Bash, el punto .significa un punto real y *es un comodín para todos los caracteres.

información relacionada