首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用sed获取日期

使用sed获取日期
EN

Stack Overflow用户
提问于 2018-11-03 01:01:54
回答 5查看 298关注 0票数 0

我有一个文件,其中包含两个abc...关键字的值。我想获取匹配abc...字符串的最新日期。在获得日期之后,我还需要通过用-替换/来格式化日期

代码语言:javascript
复制
    ---other data
2018/01/15 01:56:14.944+0000 INFO  newagent.bridge BridgeTLSAssetector::setupACBContext() - abc...

2018/02/14 01:56:14.944+0000 INFO  newagent.bridge BridgeTLSAssetector::setupACBContext() - abc...

    ---other data

在上面的例子中,我的输出应该是2018-02-14。在这里,我正在获取包含abc...值的行,并且只获取具有最新日期值的行。然后,我需要去掉剩余的字符串,只获取日期值。

我正在使用以下sed,但它不起作用

代码语言:javascript
复制
grep -iF "abc..." file.txt | tail -n 1 | sed -e 's/^[^|]*|[^|]*| *\([^ ]*\) .*/\1/' -e 's%/%-%g'
EN

回答 5

Stack Overflow用户

发布于 2018-11-03 01:14:10

这就是你想要的:

代码语言:javascript
复制
grep -iF "abc..." file.txt | tail -n 1 | awk '{print $1}' | sed 's#/#-#g'

输出如下:

代码语言:javascript
复制
2018-02-14
票数 1
EN

Stack Overflow用户

发布于 2018-11-03 01:20:10

使用awk:

代码语言:javascript
复制
$ awk '/abc\.\.\./{d=$1} END{gsub("/", "-", d); print d}' file.txt
2018-2-14

关于sed的一些内容:

代码语言:javascript
复制
tac file.txt | grep -Fi 'abc...' | sed 's/ .*//;s~/~-~g;q'
票数 1
EN

Stack Overflow用户

发布于 2018-11-03 01:20:03

既然你要找sed -

代码语言:javascript
复制
$: sed -nE ' / abc[.]{3}/x; $ { x; s! .*!!; s!/([0-9])/!/0\1/!g; s!/([0-9])$!/0\1!g; s!/!-!g; p; }' in
2018-02-14

参数

  • -n说don't print by default
  • -E说use extended regexes

脚本

  • / abc[.]{3}/x;说在每一行上用buffer
  • $ { x; s! .*!!; s!/([0-9])/!/0\1/!g; s!/([0-9])$!/0\1!g; s!/!-!g; p; }替换{}.
    • x,在最后一行($)上执行{}.
      • x内的命令集交换缓冲区,以获得最后保存的记录back.

    • s! .*!!;删除第一个空格中的所有内容(在date)

之后

如果为needed,则

    • s!/([0-9])/!/0\1/!g;在月份中添加一个零

如果为needed,则

    • s!/([0-9])$!/0\1!g;在一天中添加一个零

    • s!/!-!g;/转换为dashes

    • p打印生成的record.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53122950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档