使用Sed减少日期的秒数

时间:2012-12-05 16:04:35

标签: linux replace sed

我在文件中有一个url数据列表,如下所示:

    http://site.com/some/site.htm,12/5/2012 3:30:39 PM
    http://site.com/some/site.htm,12/5/2012 9:30:30 AM
    https://site.com/some/site.htm,12/5/2012 13:30:30 PM
    http://site.com/some/site.htm,12/5/2012 10:30:39 AM

我希望它看起来像这样:

    http://site.com/some/site.htm,12/5/2012 3:30 PM
    http://site.com/some/site.htm,12/5/2012 9:30 AM
    https://site.com/some/site.htm,12/5/2012 13:30 PM
    http://site.com/some/site.htm,12/5/2012 10:30 AM

基本上使用sed从行中删除:XX秒部分。我也不介意它是否会在会议记录后删除所有内容。我可以使用sed或cut,因为我正在使用批处理文件脚本。有人可以帮忙吗?

到目前为止,我已经尝试了以下内容:

sed 's/.*:([^,*]*) AM/\1/g' file.txt

4 个答案:

答案 0 :(得分:3)

像这样sed -r 's/(.*):[0-9]{2}(.*)/\1\2/'

$ cat file
    http://site.com/some/site.htm,12/5/2012 3:30:39 PM
    http://site.com/some/site.htm,12/5/2012 9:30:30 AM
    https://site.com/some/site.htm,12/5/2012 13:30:30 PM
    http://site.com/some/site.htm,12/5/2012 10:30:39 AM

$ sed -r 's/(.*):[0-9]{2}(.*)/\1\2/' file
    http://site.com/some/site.htm,12/5/2012 3:30 PM
    http://site.com/some/site.htm,12/5/2012 9:30 AM
    https://site.com/some/site.htm,12/5/2012 13:30 PM
    http://site.com/some/site.htm,12/5/2012 10:30 AM

说明:

(.*):     # Capture everything up the last : (greedy)
[0-9]{2}  # Match the two digits 
(.*)      # Capture the rest of the line

\1\2      # Replace with the two captured groups

注意:-r使用扩展正则表达式,可能-E取决于您的sed风格,请查看man

修改

$ sed -r 's/[0-9]{2}:[0-9]{2} /00 /' file
    http://site.com/some/site.htm,12/5/2012 3:00 PM
    http://site.com/some/site.htm,12/5/2012 9:00 AM
    https://site.com/some/site.htm,12/5/2012 13:00 PM
    http://site.com/some/site.htm,12/5/2012 10:00 AM

答案 1 :(得分:0)

一个简单的解决方案,只需在冒号后跟空格后查找2位数,然后只用空格替换。

sed 's/:[0-9][0-9] / /g' file.txt

答案 2 :(得分:0)

一个非常简单的解决方案:

sed 's/:.. / /' file

但可能不建议这样做,因为它过于通用,如果格式化稍有变化,可能会出错。

答案 3 :(得分:0)

另一种解决方案:

sed -r 's/...( [AP]M)$/\1/' file.txt

以空格结尾的行匹配,后跟AM或PM,并删除前面的三个字符。

$匹配行尾,括号保留AMPM,以便您可以在替换文本中使用\1引用它。 -r命令行选项允许使用扩展正则表达式(\1引用所需)。