我正在研究 bash 脚本。
我有一个 var ,里面有一个字符串。这是字符串:
tSA_15_20161014_11-12-50
基本上格式是tSA_(id)_(year)(month)(day)_(hour)-(min)-(seg)
重要信息:
- id 可以是 0 到 999 之间的数字
- 年份格式为yyyy
- 月份格式毫米
- 日格式DD
- 小时格式24小时
我想要得到的字符串是这样的:
20161014111250
这是yyyymmddHHMMSS
英语不是我的母语,所以如果有什么你不明白的地方请告诉我。谢谢。
答案1
带bash
参数扩展:
$ var='tSA_15_20161014_11-12-50'
$ var="${var#*_}" ## Extracts the portion after first `_` i.e.
new `var` will be `15_20161014_11-12-50`
$ var="${var#*_}" ## again gets the portion after first `_`, so in this case
after operation `var` will contain `20161014_11-12-50`
$ echo "${var//[-_]/}" ## Replaces all `-` and `_` from `$var` with null
20161014111250
答案2
echo "tSA_15_20161014_11-12-50" | awk -F'_' '{print $3$4}' | tr -d -
echo 存储字符串的 var
解释:
awk -F'_' '{print $3$4}'
将字段分隔符更改为_
并打印第三列和第四列
输出是2016101411-12-50
tr -d -
-
从先前的结果中 删除。
答案3
给定
var='tSA_15_20161014_11-12-50'
然后
IFS=_ read -a arr <<< "${var//-/}"
printf '%s%s\n' "${arr[2]}" "${arr[3]}"
20161014111250
答案4
另一种awk
方法。由于awk
可以采用多个字符作为字段分隔符,因此可以一步完成:
$ awk -F'[-_]' '{print $3$4$5$6}' <<<"$var"
20161014111250
或者,在 Perl 中:
$ perl -pe 's/.+?_.+?_//; s/[-_]//g' <<<"$var"
20161014111250
或者
$ perl -F_ -ane 's/-//g for @F; print @F[2..$#F]' <<<"$var"
20161014111250
我在用着这里是字符串,但是如果您的 shell 不支持echo $var | command
上述每个命令。