2017-04-11 66 views
1

日期我的格式爲$var_YYYY_MM_DD_HH_MM_SS.txt獲取年,月,和可變

Eg: variable=sample_data_2017_01_01_10_22_10.txt 

我需要提取此變量以下的variable

Year=YYYY 
Month=MM 
Date=DD 

能否請你幫忙嗎?

回答

4

使用本機bash,正則表達式運算符~並使用捕獲的組將它們存儲在變量中以供稍後使用。

variable="sample_data_2017_01_01_10_22_10.txt" 

if [[ $variable =~ ^sample_data_([[:digit:]]{4})_([[:digit:]]{2})_([[:digit:]]{2}).*$ ]]; then 
    year="${BASH_REMATCH[1]}" 
    month="${BASH_REMATCH[2]}" 
    date="${BASH_REMATCH[3]}" 
fi 
+1

很不錯的解決方案先生。 – RavinderSingh13

1

你可以嘗試:

Year=$(echo $variable | cut -d '_' -f3) 
Month=$(echo $variable | cut -d '_' -f4) 
Date=$(echo $variable | cut -d '_' -f5) 

這隻能如果你確信你的變量是你在你的問題描述,雖然具體的方式佈局。它分割由'_'字符分隔的字符串,然後返回標記爲-f參數的字段以進行剪切。

0

用awk

Year=$(echo $variable | awk '{split($0,a,"_"); print a[3]}') 
Month=$(echo $variable | awk '{split($0,a,"_"); print a[4]}') 
Day=$(echo $variable | awk '{split($0,a,"_"); print a[5]}') 
+0

您不需要多次調用split(),只需執行一次,然後打印前3個元素,因爲它們首先會自動拼接到數組「a」上 – Inian

+0

「read -r year year day <(awk'{split($ 0,a,「_」); print a [3],a [4],a [5]}'<<<「$ variable」)' – Inian

1

您可以簡單地使用read命令設置IFS='_'。在一些其他的awk解決方案的

$ variable=sample_data_2017_01_01_10_22_10.txt 
$ IFS='_' read -r tmp tmp Year Month Date tmp <<< "$variable" 
$ echo "$Year : $Month : $Date" 
2017 : 01 : 01 
0

建設一個更完整的解決方案是:

echo $variable | awk -F_ '{ printf "Year="$3"\nMonth="$4"\nDate="$5"\n" }'