grep [Options] pattern File
pattern 加单引号,不会替换变量,所见即输出
pattern 加双引号,会替换变量
如果所说有字符串中有空格,需要单引号或双引号
-E, --extended-regexp PATTERN是扩展表达式
-F, --fixed-strings PATTERN是一行行固定串
-G, --basic-regexp PATTERN是基本正则表达式
-P, --perl-regexp PATTERN是Perl表达式
-e, --regexp=PATTERN 使用PATTERN来匹配
-f, --file=FILE 从文件获得PATTERN
-i, --ignore-case 忽略大小写
-w, --word-regexp 强制PATTERN匹配整个单词
-x, --line-regexp 强制PATTERN匹配所有行
-z, --null-data 空数据,非换行
-s, --no-messages 压缩错误信息
-v, --invert-match 反向匹配(不符合的)
-V, --version 版本
grep正则表达式元字符集:
^ 锚定行的开始 如:'^abc'匹配所有以abc开头的行
$ 锚定行的结束 如:'abc$'匹配所有以abc结尾的行
. 匹配一个非换行符的字符 如:'ab.c'匹配ab后接一个任意字符,然后是c
* 匹配零个或多个先前字符 .*一起用代表任意字符
[] 匹配指定范围内的字符,如'[Aa]bc'匹配Abc和abc
[^] 匹配一个不在指定范围内的字符,如:'[^A-H]bc'匹配不包含A-H一个字母开头,后面跟bc的行
\(..\) 标记匹配字符,如'\(love\)'
\ 锚定单词的开始,如:'\abc匹配包含以abc开头的单词的行
\> 锚定单词的结束,如'abc\>'匹配包含以abc结尾的单词的行
x\{m\} 重复字符x,m次,如:'0\{5\}'匹配包含5个o的行
例子:
搜索多个字符串
grep -E "aaa|bbb|ccc" ./*
不区分大小写
grep [Aa]bc ./*
grep -i abc ./*
当前目录下查找含abc(不区分大小写)字符串
grep -ir abc ./*
统计含abc字符串的行数
grep -c abc abc.txt
搜素带引号的字符串"string"
grep -r "\"string\"" ./*
搜素既带abc字符串又带defgh字符串的行
grep -r abc ./* | grep defgh >./a.txt
排除多个文件目录搜索
grep abcde . -rn --exclude-dir=".git" --exclude "*.img" --exclude "*.ko" --exclude "*.so" --exclude "*.o" --exclude "*.bin" --exclude "*.jpg" --exclude "*.png" --exclude "*.a" --exclude "*.apk"
先搜文件再查找
find . -name filename.ext |xargs grep -i abcde
find . -name *.cpp -o -name *.c | xargs grep -i wifi
grep wifi -rn . --include "*.c" --include "*.h"
grep wifi -rn . --exclude "test*.c" --include "test*.h" 排除某些文件搜索
find ./ -regex ".*\.cpp\|.*\.c" | xargs grep wifi