Например, вы можете удалить все, кроме числа, следующего за цифрами и точками:
sed -e 's/.*[0-9.]*\.\([0-9]*\).*/\1/'
Пояснение:
.* anything
[0-9.]* digits and dots in any order
\. dot
\( start a matching group
[0-9]* digits
\) end the matching group
.* anything
Вся совпадающая строка заменяется соответствующей группой, т. Е. Последним числом после цифр и точек.
Porque $?
y $a
se evalúan en el shell de llamadas.
bash -c 'cat /tmp/lol ; a=$?; if (( $a == 0)); then echo "2"; fi;'
Veamos qué sucede realmente aquí:
$ set -x
$ bash -c "var=3; echo $var"
+ bash -c 'var=3; echo '
Con set -x
obtienes un seguimiento de qué comandos se ejecutan realmente (usa set +x
para desactivar esto ). Aquí vemos que la variable $var
se expande a una cadena vacía antes de que se ejecute el shell secundario bash -c
.
Esto se debe a las comillas dobles del argumento de bash -c
, lo que hará que el shell actual realice una expansión variable dentro de la cadena. Dado que la variable var
no está definida o está vacía en el shell actual, su expansión es la cadena vacía.
Para proteger una cadena de la "interferencia" del shell, use comillas simples:
$ bash -c 'var=3; echo $var'
+ bash -c 'var=3; echo $var'
3
... o escapar de$
(En mi opinión, no tan agradable):
$ bash -c "var=3; echo \$var"
+ bash -c 'var=3; echo $var'
3