[ с использованиемbash -cx 'a="_IN_workstation"; b=${a/[a-zA-Z]*[a-zA-Z]/_};echo x.$bx' частично работает, но отсутствие скобок исказит совпадение. Так что это указывает на то, что проблема в обработке скобок, но я видел работуGNU автоконфчто предполагает что-то еще. Кто-нибудь знаком с внутренностями bash? ]
У меня возникла проблема с передачей значений типа _PREROUTING _POSTROUTING для удаления символов алфавита:
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] похоже согласен со мной, мой bash не имеет (5.1)магазин +patsub_replacementдоступно для 5.2.
версию linux mint и версию bash см.шагпеременная и [исходный скрипт в]
(Bash имеет проблемы с cmdline nft cmd vs script)
Я пробовал [:alpha:]
, но ни один из них не работает в скрипте и редко в командной строке.
решение1
Вам придется использовать shopt -s extglob
то, что обычно используется on
в интерактивной оболочке, но off
в скриптах.
#!/bin/bash
shopt -s extglob
step=_SOME_under_SCORES
a=${step//_+([a-zA-Z])/_}
echo "[$step]=>[$a]"
$ ./check.sh
[_SOME_under_SCORES]=>[___]
См. man bash
разделСопоставление с образцом:
Еслиextglob опция оболочки включена с помощью встроенной функции shopt, распознаются несколько расширенных операторов сопоставления с шаблоном […]
решение2
Боги машин, судя по всему, уже достаточно посмеялись надо мной. Алексей Тен внес существенный вклад в ответ, как я считаю.
y= ${шаг//_[[:альфа:]]+([[:альфа:]])/_}