Substituição de parâmetro Bash (baparmsub?) Não está funcionando

Substituição de parâmetro Bash (baparmsub?) Não está funcionando

[ 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 extglobo que geralmente é onpara shell interativo, mas offem 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 basha 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:]])/_}

informação relacionada