我正在尝试使用正则表达式从 AIX 上的日志文件字符串(在下面的代码中)中提取日期和时间戳,$Data
并将其加载到文本文件中,如下所示:
Data="Logs/2018-12-03/log.txt:3:2018-12-03 00:00:04,333 452621453 [blah blah blah"
echo "$data" | grep -o -n '[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]' > timestamps.txt
我收到以下错误很可能是由于我的主机中的 unix 版本太旧并且它无法识别该-o
选项。有没有其他方法可以完成功能-o
?
grep: Not a recognized flag: o
Usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] -e pattern_list...
[-f pattern_file...] [file...]
Usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] [-e pattern_list...]
-f pattern_file... [file...]
Usage: grep [-r] [-R] [-H] [-L] [-E|-F] [-c|-l|-q] [-insvxbhwyu] [-p[parasep]] pattern_list [file...]
答案1
-o
请注意,即使您的实现识别了您的正则表达式,它也不会工作grep
。您还需要-E
启用扩展正则表达式。假设你有perl
,你可能会这样做,你可以尝试:
$ Data="Logs/2018-12-03/log.txt:3:2018-12-03 00:00:04,333 452621453 [blah blah blah"
$ echo "$Data" | perl -lne '/[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1]) (2[0-3]|[01][0-9]):[0-5][0-9]/ && print "$.:$&"'
1:2018-12-03 00:00
但你真的需要让你的正则表达式那么复杂吗?这还不够吗?
$ echo "$Data" | perl -lne '/\d{4}-\d{2}-\d{2} \d{2}:\d{2}/ && print "$.:$&"'
1:2018-12-03 00:00