【发布时间】:2021-03-09 07:10:28
【问题描述】:
我正在编写一个脚本,其中一部分是将日期值格式化为与 SQL*Plus 8 兼容的值。 日期格式为:
20191115103845
我需要把这个字符串改成
to_date('2019/11/15:10:38:45', 'yyyy/mm/dd:hh24:mi:ss')
我使用剪切工具:
funcion(){
data=$1
year=$(echo $data| cut -c1,2,3,4)
month=$(echo $data | cut -c5,6)
day=$(echo $data | cut -c7,8)
hour=$(echo $data| cut -c9,10)
min=$(echo $data| cut -c11,12)
sec=$(echo $date | cut -c13,14)
echo "to_date('"$year"/"$month"/"$day":"$hour":"$min":"$sec"', 'yyyy/mm/dd:hh24:mi:ss')"
}
funcion $data_to_format
(data_to_format=20191115103845)
我的问题是这需要几秒钟,我将使用这个脚本处理一千多个文件,每个文件有 100 多个日期。所以我认为也许'sed'命令可能会更好。 但我使用的是 ksh88(旧 ksh),而 sed 没有 -E 选项,无法使其工作。
谁能帮我解决一个旧的正则表达式 sed 解决方案?
【问题讨论】:
-
看看
bash:data="20191115103845"; echo "${data:0:4}" -
在您的代码中,有时会有
echo $data(以a结尾),有时还有echo $date(以e结尾)。 -
您拥有的 sed 版本与您使用的 shell 无关 - sed 和 bash(或 ksh88 或任何其他 shell)是完全不同的工具。
-
我刚刚注意到您说
i'm going to use this script for more than thousand files with 100+ dates each one- 鉴于此,请不要执行此处任何答案中显示的任何操作,因为您应该使用 awk 脚本来处理文件,而不是使用 shell 脚本调用 awk(或执行其他任何操作)来转换单个字符串。