[ usandobash -cx 'a="_IN_estação de trabalho"; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' funciona parcialmente, mas a falta de parênteses distorcerá a correspondência. Então, isso indica que o processamento de parênteses é o problema, mas eu vi o trabalho deAutoconf GNUo que sugere outra coisa. Alguém familiarizado com os componentes internos do bash? ]
Estou tendo problemas ao alimentar valores como _PREROUTING _POSTROUTING para eliminar caracteres alfabéticos:
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 concordar comigo, meu bash (5.1) não temcomprar +patsub_replacementdisponível para 5.2.
versão linux mint e versão bash vejaetapavariável e [script original em]
(Bash tem problemas com cmdline nft cmd vs script)
Eu tentei [:alpha:]
, mas nenhum deles funciona no script e raramente na linha de comando.
Responder1
Você deve usar shopt -s extglob
o que geralmente é on
para shell interativo, mas off
em scripts.
#!/bin/bash
shopt -s extglob
step=_SOME_under_SCORES
a=${step//_+([a-zA-Z])/_}
echo "[$step]=>[$a]"
$ ./check.sh
[_SOME_under_SCORES]=>[___]
Veja man bash
a seçãoCorrespondência de padrões:
Se oextglob A opção shell é habilitada usando o shopt integrado, vários operadores estendidos de correspondência de padrões são reconhecidos [...]
Responder2
Os deuses das máquinas, aparentemente, já tiveram tempo suficiente rindo de mim. Alexey Ten contribuiu substancialmente para a resposta, acredito.
y= ${passo//_[[:alfa:]]+([[:alfa:]])/_}