1

我在一个文件中有一个 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

4 回答 4

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
于 2012-12-05T16:11:49.420 回答
0

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

sed 's/:[0-9][0-9] / /g' file.txt
于 2012-12-05T16:17:19.993 回答
0

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

sed 's/:.. / /' file

但这可能不推荐,因为它太通用了,如果格式发生轻微变化,可能会出错。

于 2012-12-05T16:18:35.313 回答
0

另一种解决方案:

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

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

$尾匹配,括号保留AMor因此您可以在替换文本中PM使用 the 引用它。\1命令行选项允许使用扩展的-r正则表达式(需要\1参考)。

于 2012-12-05T16:18:46.460 回答