我正在尝试解析我的/ var / log / messages。我需要一个可以验证前15个字符是否为日期的脚本。它时不时地包含一条像"---------------"
这样的线,它会让一切都变得混乱。
典型的/ var / log /消息如下所示:
Aug 12 13:22:33 xxxxxxx xxxxx xxxxx
我的bash脚本试图取出前6个字符并将其标识为日期
if date -d "${line:0:3} ${line:4:2}" ; then
这样可以正常工作并识别日期,但如果该行是一堆-----,它也会将其标识为日期。
如何查看该行是否以日期开头?
答案 0 :(得分:4)
检查该行的开头是否为日期:
line="Aug 12 13:22:33 xxxxxxx xxxxx xxxxx"
if [[ $line =~ ^([[:alpha:]]{3} +[[:digit:]]{1,2} [:[:digit:]]{8}) ]]; then
echo "${BASH_REMATCH[1]}"
fi
Aug 12 13:22:33
答案 1 :(得分:3)
您可以检查以----
开头的行:
[[ "$line" != "----"* ]] && if date -d "${line:0:3} ${line:4:2}" ; then
答案 2 :(得分:2)
这是一个严格的比较:
if [[ $line =~ ^[A-Z][a-z]{2}\ {1,2}[0-9]{1,2}\ [0-9]{2}(:[0-9][0-9]){2} ]]; then
echo "$BASH_REMATCH"
fi
答案 3 :(得分:1)
如果您安装了perl,请安装Date::Manip,您的脚本将变为:
#!/bin/sh
export PERL=/usr/bin/perl
$PERL -MDate::Manip -e 'Date_init(); return 1 if parseDate($_); return 0;' $*