Bash - 仅从字符串变量中提取日期和时间,并排除其他周围的文本



我是sed的新手,在这种情况下一直在尝试使用它,但还没有运气。

我正在读取日志文件,并将前一行存储到变量中,以便在需要时提取日期。

变量字符串示例:

jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt ST:

我只想要方括号中的日期和时间戳。我想忽略前后的字符。日期和时间格式的长度和格式始终相同。我可以用正则表达式匹配它,只是不确定如何将其从变量中提取到新变量中,只有方括号内的数据。

我尝试了这样的事情: 优先级 = 回显"$prior" |awk -F'[][]' '{print $2}'

但这没有用。

如果您删除echo之前的空间,它应该可以工作。

echo "jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt ST:" | awk -F'[][]' '{print $2}'
05/06/20 16:42:52.964

然后这样声明:priordate=$(echo ...)

您可以使用 Bash 的原生正则表达式匹配。这是一个快速而肮脏的正则表达式,仅依赖于捕获[]之间的任何内容。如有必要,您当然可以使其更具体。

#!/bin/bash
s="jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt ST:"
pattern="[(.*)]"
if [[ "${s}" =~ $pattern ]]
then
date_time="${BASH_REMATCH[1]}"
fi
echo "${date_time}"

输出:

05/06/20 16:42:52.964

最新更新