Ejemplo:
file="123 hello"
¿Cómo puedo editar la cadena file
tal que sólo contiene los números y el texto de la parte eliminada?
Así,
echo $file
debe imprimir 123
sólo.
Ejemplo:
file="123 hello"
¿Cómo puedo editar la cadena file
tal que sólo contiene los números y el texto de la parte eliminada?
Así,
echo $file
debe imprimir 123
sólo.
Esta es una manera con
sed
:O con puro
bash
:Guardar el resultado en la variable en sí, hacer
file=${file//[!0-9]/}
. También, usted puede, en general, reemplazarecho
algo|
el comando con el comando<<<
algo.<<<
puede ser extraño para la gente que comienza a bash-script. Puedo actualizar mi respuesta con lafile=$file{file//[!0-9]/}
, muchas gracias!git version 1.7.1
)? Uso${gitVersion//[!0-9.]/}
y mantiene los períodos.file="hola que tal 23"
y, a continuación,echo "${file//[!0-9]/}"
devuelve 23.echo hello 1 2 3 | sed 's/[^0-9]*//'
(no en el ejemplo) devuelve1 2 3
, pero tu ejemplo,echo hello 1 2 3 | sed 's/[^0-9]*//g'
, devuelve123
. Preguntándose por qué dejar fuera lag
conserva espacios.sed 's/./X/' <<< "hello"
consed 's/./X/g' <<< "hello"
(spoiler: vuelven «Xello» y «XXXXX»).Puede decir:
Sin embargo, este se topa con problemas en ciertos casos:
Utilizando
tr
:${file%%[^0-9]*}
siempre va a quitar todo, desde el primer no-dígito al final de la cadena.%%
no es lo que usted quiere aquí en absoluto (ni es%
o#
o##
). Me siento como que me falta una broma aquí.sed
. Por otra parte, devnull ha advertido acerca de las limitaciones de esta primera solución y se la dio a otro que funciona bien. Más soluciones, más riqueza.