gegrep 命令工作不一致
gegrep command working inconsistently
我正在尝试从文件中 grep 某些模式并将其列出,但 grep 命令无法始终如一地工作。
对于其中一种模式它的工作和其他它不工作。如果我遗漏了什么,请告诉我:
要grep的文件
===============================================================================================================================
START_TIME END_TIME CLIENT_NAME STATUS BACKUP_TYPEPOLICY_NAME
===============================================================================================================================
2015-12-09 01:51:35 2015-12-09 02:11:47 atrcxb1144-bup3 success FULL atrcxb1144-bup3_FILES
2015-12-09 02:13:06 2015-12-09 02:14:12 atrcxb1144-bup3 success FULL atrcxb1144-bup3_Hot_Catalog
2015-12-15 08:17:48 2015-12-15 08:18:55 atrcxb1144-bup3 success FULL atrcxb1144-bup3_Hot_Catalog
2016-01-23 23:55:00 2016-01-24 00:17:03 cbtcnbgrn2eniqs2-bkup success FULL ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup
未成功
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup[[:blank:]]+)' /usr/openv/netbackup/db/.backup_history
bash-3.2# echo $?
1
成功
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup[[:blank:]]+)' /usr/openv/netbackup/db/.backup_history
2016-01-23 23:55:00 2016-01-24 00:17:03 cbtcnbgrn2eniqs2-bkup success FULL ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup
bash-3.2# echo $?
0
似乎在不成功的情况下,ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup
后面没有space/blank,而在成功的情况下,ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup
是。
并且您的正则表达式匹配这两列末尾所需的空白。
所以 grep 按预期工作,并且要匹配你不成功的字符串,你需要用 [[blank]]*
替换最后的 [[blank]]+
如下:
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup[[:blank:]]*)' /usr/openv/netbackup/db/.backup_history
+
匹配前一个模式的一次或多次出现,而 *
出现零次或多次。
我正在尝试从文件中 grep 某些模式并将其列出,但 grep 命令无法始终如一地工作。
对于其中一种模式它的工作和其他它不工作。如果我遗漏了什么,请告诉我:
要grep的文件
=============================================================================================================================== START_TIME END_TIME CLIENT_NAME STATUS BACKUP_TYPEPOLICY_NAME =============================================================================================================================== 2015-12-09 01:51:35 2015-12-09 02:11:47 atrcxb1144-bup3 success FULL atrcxb1144-bup3_FILES 2015-12-09 02:13:06 2015-12-09 02:14:12 atrcxb1144-bup3 success FULL atrcxb1144-bup3_Hot_Catalog 2015-12-15 08:17:48 2015-12-15 08:18:55 atrcxb1144-bup3 success FULL atrcxb1144-bup3_Hot_Catalog 2016-01-23 23:55:00 2016-01-24 00:17:03 cbtcnbgrn2eniqs2-bkup success FULL ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup
未成功
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup[[:blank:]]+)' /usr/openv/netbackup/db/.backup_history
bash-3.2# echo $?
1
成功
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup[[:blank:]]+)' /usr/openv/netbackup/db/.backup_history
2016-01-23 23:55:00 2016-01-24 00:17:03 cbtcnbgrn2eniqs2-bkup success FULL ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup
bash-3.2# echo $?
0
似乎在不成功的情况下,ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup
后面没有space/blank,而在成功的情况下,ENIQ_STATS_ONBLADE_RAW_cbtcnbgrn2eniqs2-bkup
是。
并且您的正则表达式匹配这两列末尾所需的空白。
所以 grep 按预期工作,并且要匹配你不成功的字符串,你需要用 [[blank]]*
替换最后的 [[blank]]+
如下:
bash-3.2# /usr/sfw/bin/gegrep '([[:blank:]]+success[[:blank:]]+[FI][UN][LC][LR][[:blank:]]+ENIQ_STATS_ROOT_cbtcnbgrn2eniqs2-bkup[[:blank:]]*)' /usr/openv/netbackup/db/.backup_history
+
匹配前一个模式的一次或多次出现,而 *
出现零次或多次。