我的格式为variable
$var_YYYY_MM_DD_HH_MM_SS.txt
Eg: variable=sample_data_2017_01_01_10_22_10.txt
我需要从这个变量中提取以下内容:
Year=YYYY
Month=MM
Date=DD
你能帮忙吗?
答案 0 :(得分: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 :(得分:1)
你可以尝试:
Year=$(echo $variable | cut -d '_' -f3)
Month=$(echo $variable | cut -d '_' -f4)
Date=$(echo $variable | cut -d '_' -f5)
这只有在您确定您的变量按照您在问题中描述的确切方式布局时才有效。它将由“_”字符分隔的字符串拆分,然后将表示为-f
参数的字段返回到cut。
答案 2 :(得分:1)
您只需使用read
命令设置IFS='_'
。
$ 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
答案 3 :(得分: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]}')
答案 4 :(得分:0)
在其他一些awk解决方案的基础上,更完整的解决方案将是:
echo $variable | awk -F_ '{ printf "Year="$3"\nMonth="$4"\nDate="$5"\n" }'