나는 파일이라는 파일을 가지고 62810501601420200502.swt1
있으며 결국 내 날짜 형식은 20200502입니다. 그 앞에는 (동적으로) 변경되는 임의의 숫자가 있습니다. 내가 원하는 것은 파일의 날짜를 읽고 쉘 스크립트를 통해 로그를 생성하고 싶다는 것입니다.
예를 들어 오늘이 20200502라면 "서버에서 파일을 찾았습니다"라는 로그를 생성하고, 그렇지 않으면 파일을 찾을 수 없으면 "서버에서 파일을 찾을 수 없습니다"라고만 표시합니다.
아래 코드에는 로그 및 기타 콘텐츠를 생성할 수 있도록 앞에 고정된 이름이 있는 파일이 있습니다.
하지만 이제는 파일 이름을 변경할 수 있지만 날짜 위치는 고정되고 파일 이름 길이도 고정됩니다.
#!/bin/sh
###############################################
PU=$(date +%d-%m-%Y)
Date=$(date +%Y-%m-%d)
###############################################
urban="/Path/of/file/PAYMENT_$PU.csv"
###############################################
if [ -f "$urban" ]; then
echo "[$PU] $urban file exist" >> /Mail_Scripts/mail.log
else
echo "[$Date] $urban file does not exist" >> /Scripts/mail.log
echo "$Date,CCB,PAYMENT_$PU.csv,IP" >> /Scripts/iles.csv
fi
###############################################
어떤 제안이나 해결책이 있습니까?
답변1
세게 때리다
bash
(shebang line call 을 사용 sh
하지만 질문에 tagged bash
) 다음 코드를 사용하면 점 앞의 8자를 가져올 수 있습니다.
var=62810501601420200502.swt1
tmp="${var%.*}"
date_string="${tmp: -8}"
sed
당신 과 함께 sh
사용할 수 있습니다 sed
:
date_string="$(printf %s "$var" | sed -r 's/^(.*)(.{8})\..*$/\2/')"
grep
또는 다음을 사용하여 grep
:
date_string="$(printf %s "$var" | grep -oP '.{8}(?=\.)')"