문자열 ABCD20110420.txt가 있는데 그 중 날짜를 추출하고 싶습니다. 예상 됨 2011-04-20 바꾸기를 사용하여 텍스트 부분을 제거 할 수 있지만 어떻게 "-"를 삽입합니까?문자열에서 숫자 추출
# echo "ABCD20110420.txt" | replace 'ABCD' '' | replace '.txt' ''
20110420
문자열 ABCD20110420.txt가 있는데 그 중 날짜를 추출하고 싶습니다. 예상 됨 2011-04-20 바꾸기를 사용하여 텍스트 부분을 제거 할 수 있지만 어떻게 "-"를 삽입합니까?문자열에서 숫자 추출
# echo "ABCD20110420.txt" | replace 'ABCD' '' | replace '.txt' ''
20110420
echo "ABCD20110420.txt" | sed -e 's/ABCD//' -e 's/.txt//' -e 's/\(....\)\(..\)\(..\)/\1-\2-\3/'
읽기 : sed FAQ
그냥 쉘 (bash는)
$> file=ABCD20110420.txt
$> echo "${file//[^0-9]/}"
20110420
$> file="${file//[^0-9]/}"
$> echo $file
20110420
$> echo ${file:0:4}-${file:4:2}-${file:6:2}
2011-04-20
은 위의 샘플과 같은 파일에 적용을 사용합니다. A1BCD20110420.txt
과 같은 파일이 있으면 작동하지 않습니다. 이 경우를 들어
$> file=A1BCD20110420.txt
$> echo ${file%.*} #get rid of .txt
A1BCD20110420
$> file=${file%.*}
$> echo "2011${file#*2011}"
20110420
또는 당신은 정규 표현식 (배쉬를 3.2 이상)를 사용할 수 있습니다
$> file=ABCD20110420.txt
$> [[ $file =~ ^.*(2011)([0-9][0-9])([0-9][0-9])\.*$ ]]
$> echo ${BASH_REMATCH[1]}
2011
$> echo ${BASH_REMATCH[2]}
04
$> echo ${BASH_REMATCH[3]}
20
$ file=ABCD20110420.txt
$ echo "$file" | sed -e 's/^[A-Za-z]*\([0-9][0-9][0-9][0-9]\)\([0-9][0-9]\)\([0-9][0-9]\)\.txt$/\1-\2-\3/'
이것은 sed를 한 번 호출하면됩니다.
echo "ABCD20110420.txt" | sed -r 's/.+([0-9]{4})([0-9]{2})([0-9]{2}).+/\1-\2-\3/'
echo "ABCD20110420.txt" | sed -r 's/.{4}(.{4})(.{2})(.{2}).txt/\1-\2-\3/'