我有一个文件,其中包含两个abc...关键字的值。我想获取匹配abc...字符串的最新日期。在获得日期之后,我还需要通过用-替换/来格式化日期
---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,但它不起作用
grep -iF "abc..." file.txt | tail -n 1 | sed -e 's/^[^|]*|[^|]*| *\([^ ]*\) .*/\1/' -e 's%/%-%g'发布于 2018-11-03 01:14:10
这就是你想要的:
grep -iF "abc..." file.txt | tail -n 1 | awk '{print $1}' | sed 's#/#-#g'输出如下:
2018-02-14发布于 2018-11-03 01:20:10
使用awk:
$ awk '/abc\.\.\./{d=$1} END{gsub("/", "-", d); print d}' file.txt
2018-2-14关于sed的一些内容:
tac file.txt | grep -Fi 'abc...' | sed 's/ .*//;s~/~-~g;q'发布于 2018-11-03 01:20:03
既然你要找sed -
$: 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.
https://stackoverflow.com/questions/53122950
复制相似问题