파일 이름에서 날짜를 가져와야 합니다.

파일 이름에서 날짜를 가져와야 합니다.

파일 이름이 abcd_abcd_12302022.csv이고 다음 명령을 사용하여 파일 이름에서 날짜를 추출했습니다.

cut -c 11-18

날짜는 12302022입니다. 2022년 12월 30일에 다음 명령을 실행하려고 시도했지만 12_30_2022를 얻었습니다.

echo '20150716' | sed -e 's/\([0-9]\{4\}\)\([0-9]\{2\}\)\([0-9]\{2\}\)/\1_\2_\3/'

2022년 12월 30일 출력이 필요합니다.

답변1

이것은 당신과 같은 기본 생각입니다. 거기에 직접 추가했으므로 _변경하면 /작동합니다. sed의 연산자에 대해 다른 구분 기호를 사용해야 합니다 s///. 여기서는 다음을 사용하고 있습니다 s|||.

$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed -E 's|(..)(..)(....)|\1/\2/\3|'
12/30/2022

또는 휴대성을 높이려면 다음을 수행하세요.

$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed  's|\(..\)\(..\)\(....\)|\1/\2/\3|'
12/30/2022

또는 를 사용할 수 있지만 다음 을 사용하여 삽입하는 내용을 이스케이프 처리 s///해야 합니다 ./\/

$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed -E 's/(..)(..)(....)/\1\/\2\/\3/'
12/30/2022

$ echo abcd_abcd_12302022.csv | cut -c 11-18 | sed  's/\(..\)\(..\)\(....\)/\1\/\2\/\3/'
12/30/2022

답변2

Bash 셸의 변수에 파일 이름이 있는 경우 and를 사용하는 대신 다음 명령을 사용하여 셸에서 직접 원하는 형식을 가져올 수 있습니다 cut.sed쉘 매개변수 확장:

file=abcd_abcd_12302022.csv
printf '%s\n' "${f:10:2}/${f:12:2}/${f:14:4}"

이는 대화형 사용이나 일회성 이벤트에는 중요하지 않을 수 있지만 많은 파일에서 타임스탬프를 추출하려는 경우 주석을 저장하면 시간이 절약 cut될 수 있습니다 .sed

관련 정보