今天在工作时,想用grep匹配一个字符串,我本来的写法是grep 'rooney_gm_log_\d',但是发现这样不能实现。我改为grep 'rooney_gm_log_[0-9]'.后来咨询同事,告诉我应该写成grep -P 'rooney_gm_log_\d'。-P支持perl的正则表达式。\d难道是perl里才有的正则表达式吗?这个以前还真不知道。
后来开始测试正则表达式的常用用法,看看那些是扩展的,那些是perl
cat malog.log
/app/wuanchuang/malog.sh: line 14: type=3: command not found
grep '/app' malog.log 可以匹配出这句话
grep '/ap*'也可以匹配出来
但是grep '/ap+' 或者 '/ap?'就不能匹配出来,要用grep -E扩展的正则表达式。
grep '/ap{0,}' (--{}系列)匹配不出,也需要-E,是扩展正则表达式
总结:
$、^、*、.、[]、\w、\W是普通的正则表达式。我也不知道该怎么形容- -
{}、+、?要加-E,扩展正则表达式
\d、\D要加-P,perl的正则表达式
-v 反向查找。排除匹配的内容
-i 忽略大小写
-w 显示全字符符合的行。如果grep 'wu' ,则wu是一个完整的单词
-x 显示全行符合的行。 如果grep 'wu',则一行的内容是w