我有一堆看起来像这样的数据:
“2004-03-23 20:11:55”3 3 1
“2004-03-23 20:12:20”1 1 1
“2004-03-31 02:20:04”15 15 1
“2004-04-07 14:33:48”141 141 1
“2004-04-15 02:08:31”2 2 1
“2004-04-15 07:56:01”1 2 1
“2004-04-16 12:41:22”4 4 1
我需要将这些数据提供给只接受UNIX(Epoch)格式时间的程序。有没有办法可以改变bash中的所有日期?我的第一直觉告诉我做这样的事情:
sed 's/"(.*)"/`date -jf "%Y-%m-%d %T" "\1" "+%s"`'
但我不完全确定\1
调用中的date
会正确反引用sed匹配的正则表达式。事实上,当我运行它时,我得到以下响应:
sed:1:“s /(".*")/`date -jf”%...“:正则表达式中未终止的替代
任何人都可以指导我正确的方向吗?谢谢。
答案 0 :(得分:1)
single quotes之间不会扩展任何内容。另外,不,shell扩展将在sed
\1
扩展之前发生,因此您的代码无法正常工作。这样的事情(未经测试):
while IFS= read -r date time a b c
do
date --date "${date:1} ${time::-1}" # Cut the variables to remove the literal quotes
printf " %s %s %s\n" "$a" "$b" "$c"
done < file