2017-04-11 92 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" }'