grep:不是一个可识别的标志:o

grep:不是一个可识别的标志:o

我正在尝试使用正则表达式从 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

相关内容