我有一個文件:filename_20130214_suffix.csv 我想在bash中替換yyyymmdd部分。這是我打算做:Bash字符串替換正則表達式重複
file=`ls -t /path/filename_* | head -1`
file2=${file/20130214/20130215}
#this will not work
#file2=${file/[0-9]{8}/20130215/}
我有一個文件:filename_20130214_suffix.csv 我想在bash中替換yyyymmdd部分。這是我打算做:Bash字符串替換正則表達式重複
file=`ls -t /path/filename_* | head -1`
file2=${file/20130214/20130215}
#this will not work
#file2=${file/[0-9]{8}/20130215/}
的問題是,參數擴展不使用正則表達式,但圖案或水珠(比較正則表達式的區別「 filename_ 的.csv」和水珠「 filename_ .csv「)。 Globs無法匹配固定數量的特定字符串。
但是,您可以在bash
中啓用擴展模式,該模式應該足夠接近您想要的。
shopt -s extglob # Turn on extended pattern support
file2=${file/+([0-9])/20130215}
不能完全匹配8 digts,但+(...)
讓你匹配一個或多個括號內的模式,這應該足以滿足您的使用情況。
因爲所有你想在這種情況下,做的是_
字符之間代替一切,你也可以簡單地使用
file2=${file/_*_/_20130215_}
[[ $file =~ ^([^_]+_)[0-9]{8}(_.*) ]] && file2="${BASH_REMATCH[1]}20130215${BASH_REMATCH[2]}"