2013-02-16 2 views

ответ

5

Проблема заключается в том, что расширение параметр не использует регулярные выражения, но узоры или шарики (сравните разницу между регулярным выражением «filename_ .csv» и Глоб " filename_ .csv "). Globs не может соответствовать фиксированному числу определенной строки.

Однако вы можете включить расширенные шаблоны в bash, который должен быть достаточно близко к тому, что вы хотите.

shopt -s extglob # Turn on extended pattern support 
file2=${file/+([0-9])/20130215} 

Вы не можете точно соответствовать 8 digts, но +(...) позволяет соответствовать одному или более из шаблона внутри скобок, которое должно быть достаточным для использования.

Поскольку все, что вы хотите сделать в этом случае заменить все между _ символов, вы также можете просто использовать

file2=${file/_*_/_20130215_} 
1
[[ $file =~ ^([^_]+_)[0-9]{8}(_.*) ]] && file2="${BASH_REMATCH[1]}20130215${BASH_REMATCH[2]}" 
Смежные вопросы