파일이 있습니다. 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/}
문제 매개 변수 확장 정규 표현식을 사용하지 않는,하지만 패턴이나 globs와가 (정규 표현식의 차이 비교한다는 것입니다. "filename_을 .CSV"및 글로브 "여기에 내가 할 의도 무엇인가 filename_ .csv "). 글로브는 고정 된 수의 특정 문자열과 일치 할 수 없습니다.
그러나 확장 패턴을 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]}"