【问题标题】:How to fragment a character string in Linux/Unix Shell?如何在 Linux/Unix Shell 中对字符串进行分段?
【发布时间】:2017-07-10 16:35:05
【问题描述】:
我存储在变量中的内容,例如 xyz:
20170629
我要打印的内容:
2017 年 06 月 29 日
我该怎么做:
year=$(echo $xyz | cut -c1-4)
month=$(echo $xyz | cut -c5-6)
day=$(echo $xyz | cut -c7-8)
echo $year $month $day
我需要知道一种更懒惰的方式来实现这一点。谢谢你。
【问题讨论】:
标签:
linux
bash
shell
unix
scripting
【解决方案1】:
内置 bash substring manipulation:
echo ${xyz:0:4} ${xyz:4:2} ${xyz:6:2}
这将从位置 0 回显长度为 4(年)的子字符串,然后从位置 4 回显长度为 2(月)的子字符串,最后从位置 6 回显长度为 2(天)的子字符串。
或者使用date 命令:
date -d'20160629' "+%Y %m %d"
我们向它提供输入日期并为其提供新格式。检查 date 手册页和 man date 以查看所有格式选项。
【解决方案2】:
在 POSIX shell 中,您可以使用:
$ echo $(expr substr "$var" 1 4) \
$(expr substr "$var" 5 2) \
$(expr substr "$var" 7 2)
如果您使用 bash,字符串索引 是最佳选择,但对于通常暗示 POSIX shell 的shell,字符串索引 不可用。