如何从时间戳中删除第一个冒号“:”?

如何从时间戳中删除第一个冒号“:”?

我是编程新手!!

有人可以帮忙删除:时间戳中第一个位置的吗::29.06.2019 23:03:17

目前我正在尝试使用 awk/cut 命令来执行此操作,如下所示:

TDS="$(grep 'Logfile started' process.log |  awk '{print $3,$4}' | cut -d: -f2)"
echo "$TDS"


29.06.2019 23

但输出不是我想要的!我想将其打印为29.06.2019 23:03:17

答案1

要截断第一个字符,您还可以使用cut -c

$ echo ":29.06.2019 23:03:17" | cut -c 2-
29.06.2019 23:03:17

答案2

使用

cut -d: -f2-

代替

cut -d: -f2

获取从第二个字段到行尾的任何内容:

TDS="$(grep 'Logfile started' process.log |  awk '{print $3,$4}' | cut -d: -f2-)"
echo "$TDS"

答案3

awk是一款很酷的工具,你可以用它解决非常复杂的任务。但对于你的问题,我宁愿坚持使用 bash 的基本功能。

为了轻松删除替换内容,我将执行以下操作:

zehe="Logfile started :29.06.2019 23:03:17"
echo "${zehe#*:}"

这将打印:

29.06.2019 23:03:17

当我处于你的位置并开始学习编程和 bash 时,我学到了很多这本手册的内容:

ABS - 高级 Bash 脚本指南

您可以找到更多与您的问题相关的示例和有趣信息这里,寻找‘子字符串删除’。

答案4

由于您已经在处理这个问题awk,您也可以直接完成整个过程:

$ echo "foo bar :29.06.2019 23:03:17" |  awk '{sub(/^:/,"",$3); print $3,$4}' 
29.06.2019 23:03:17

sub命令的一般格式是sub(/REGEX/, REPLACEMENT, TARGET),它将用输入字符串中REGEX的字符串替换正则表达式的所有匹配项。在这里,我们将从第三个字段()开始的第一个(表示“开头”)替换为空。REPLACEMENTTARGET:^$3

当然,如果您在 awk 中执行此操作,您也可以在 awk 中执行所有操作并通过一次操作完成整个操作:

$ echo "Logfile started :29.06.2019 23:03:17" | 
    awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}' 
29.06.2019 23:03:17

或者,就你的情况而言:

TDS="$(awk '/Logfile started/{sub(/^:/,"",$3); print $3,$4}' process.log)"
echo "$TDS"

相关内容