私はファイルと呼ばれるファイルを持って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
が、質問にタグ付けされています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}(?=\.)')"