需要正则表达式来删除csv文件中日期时间字符串中的字符

时间:2016-11-06 05:05:09

标签: bash awk sed

我有一个csv文件,其中包含以下字符串:

"2016-10-25T14:07:49.298-07:00"

我想替换为:

"2016-10-25", "14:07:49"

我将原始字符串与正则表达式匹配:

([0-9]{4}-[0-9]{2}-[0-9]{2})[T]([0-9]{2}\:[0-9]{2}\:[0-9]{2})\.[0-9]{3}-07\:00

但我需要一些帮助

2 个答案:

答案 0 :(得分:2)

使用awk,假设T.是唯一的

$ echo '"2016-10-25T14:07:49.298-07:00"' | awk -F'[T.]' '{print $1 "\", \"" $2 "\""}'
"2016-10-25", "14:07:49"
  • -F'[T.]'T.指定为字段分隔符
  • 然后打印带有所需格式的第一个和第二个字段

答案 1 :(得分:1)

使用sed

sed -E 's/^([^T]+)T([^.]+).*/\1", "\2"/'
  • ^([^T]+)匹配最高T的部分,并将其放入捕获的第1组

  • T字面匹配T

  • ([^.]+)与下一个.匹配,并将其放入捕获的组(2)

  • .*与其他

  • 相匹配
  • 在替换中,捕获的组使用正确的格式来获得所需的输出,\1", "\2"

示例:

$ sed -E 's/^([^T]+)T([^.]+).*/\1", "\2"/' <<<'"2016-10-25T14:07:49.298-07:00"'
"2016-10-25", "14:07:49"