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

String Bash-仅从字符串变量中提取日期和时间,并排除周围的其他文本,string,bash,date,match,extract,String,Bash,Date,Match,Extract,我是sed新手,一直在尝试在这种情况下使用它,但运气不佳 我正在读取一个日志文件,并将前一行存储到一个变量中,以便在需要时提取日期 变量字符串示例: jcl/jclnt.log-[05/06/20 16:42:52.964]:jclnt街: 我只想要方括号里的日期和时间戳。我想忽略前后的角色。日期和时间格式始终是相同的长度和格式。我可以用一个正则表达式来匹配它,只是不知道如何将它从一个变量中提取到一个新变量中,并且只使用方括号中的数据 我试过这样的方法: priordate=echo“$prev

我是sed新手,一直在尝试在这种情况下使用它,但运气不佳

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

变量字符串示例:

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

我只想要方括号里的日期和时间戳。我想忽略前后的角色。日期和时间格式始终是相同的长度和格式。我可以用一个正则表达式来匹配它,只是不知道如何将它从一个变量中提取到一个新变量中,并且只使用方括号中的数据

我试过这样的方法: priordate=echo“$previor”| awk-F'[]]“{print$2}”


但是这不起作用。

您可以使用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

如果在
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…
priordate=$(echo“$previor”| awk-F'[[]'.[]'{print$2}')
priordate=$(echo“$previor”| sed's/*\[\([^]*\])./\1/'