파일 이름이 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