bash:使用sed + date批量重新格式化?

时间:2014-02-01 00:42:43

标签: regex bash sed

我有一堆看起来像这样的数据:

  

“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”%...“:正则表达式中未终止的替代

任何人都可以指导我正确的方向吗?谢谢。

1 个答案:

答案 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