[ usandobash -cx 'a="_IN_estación de trabajo"; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' funciona parcialmente, pero la falta de paréntesis distorsionará la coincidencia. Entonces esto apunta a que el procesamiento de paréntesis es el problema, pero he visto el trabajo deconfiguración automática de GNUlo que sugiere algo más. ¿Alguien familiarizado con los aspectos internos de bash? ]
Tengo un problema con la alimentación de valores como _PREROUTING _POSTROUTING para eliminar los caracteres del alfabeto:
a=${step/\_+([a-zA-Z]/\_}
[ note: replacing underscore with \x5f does nothing for the script although using sed works via 's/_[a-zA-Z][a-zA-Z]*/_/gp' but that is NOT what i __wanted__]
(GNU)[https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html] parece estar de acuerdo conmigo, mi bash (5.1) no tienecomprar +patsub_replacementdisponible para 5.2.
versión de linux mint y versión bash verpasovariable y [script original en]
(Bash tiene problemas con cmdline nft cmd vs script)
Lo intenté [:alpha:]
pero ninguno funciona en script y rara vez en la línea de comando.
Respuesta1
Tienes que usar shopt -s extglob
el cual suele ser on
para shell interactivo, pero off
en scripts.
#!/bin/bash
shopt -s extglob
step=_SOME_under_SCORES
a=${step//_+([a-zA-Z])/_}
echo "[$step]=>[$a]"
$ ./check.sh
[_SOME_under_SCORES]=>[___]
Mira man bash
la secciónLa coincidencia de patrones:
Si elextglob La opción Shell está habilitada usando el shopt incorporado, se reconocen varios operadores de coincidencia de patrones extendidos […]
Respuesta2
Los dioses de las máquinas, al parecer, ya se han reído bastante de mí. Creo que Alexey Ten contribuyó sustancialmente a la respuesta.
y= ${paso//_[[:alpha:]]+([[:alpha:]])/_}