Linux学习总结:grep文本搜索工具
功能:根据用户指定的文本模式(搜索条件)对目标文件进行逐行搜索,并把匹配的行打印出来,它的全称为“Global Regular Expression Print”,全局正则表达式,它默认是开放给所有用户。
语法格式:Grep [option] pattern file
Option:命令选项,具体包含:
-v: --revert-match 反向选取,显示不包含匹配文件的所有行;
-i: --ignore-case 忽略字符大小写;
-c: --count 计算符合样式的列数
-E: --extended-regexp 支持使用正则表达式;
-A: --after-context 除了显示符合范本样式的列之外,并显示该行之后的内容
-B: --before-context除了显示符合范本样式的列之外,并显示该行之前的内容
-C: --context除了显示符合范本样式的列之外,并显示该行之前后的内容
-n: --line-number 在显示符合样式的那一行之前同时标记出该行的列数编号;
实例一、显示文件“/tmp/testin.sh”里面不包含“Linux”的所有行
命令:grep �v�n “Linux” /tmp/testin.sh
实例二、查询文件“/tmp/testin.sh”里关键字“Linux”不区分大小写的所有行
命令:grep -v -n "Linux" /tmp/testin.sh
实例三、显示包含大小写“Linux”关键字的所有行,并计算总数
命令:grep -v -n -c "Linux" /tmp/testin.sh
正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。
正则表达式元字符,其中:
字符匹配:
“.” : 匹配任意单个字符,如”grep.p”匹配grep后接一个任意字符;
“[]” : 匹配指定范围内的任意个字符,如”[Gg]rep”匹配Grep 和grep;
“[^]” : 匹配不在指定范围内的任意个字符,如”[^a-z]grep”匹配不包含”a-z”的字母开头,紧接着grep;
位置锚定:
“^” : 行首定位符,”^grep”匹配所有以grep开头的行;
“$” : 行尾定位符,”grep$”匹配所有以 grep结尾的行;
“^$”: 空白行;
“\<”: 锚定单词的开始,如:”\<grep”匹配包含以”grep”开头的单词的行;
“\>”:锚定单词的结束,如:”grep\>”匹配包含以”grep”结尾的单词的行;
次数匹配:
“*” : 匹配零个或多个字符,如”*grep”匹配所有一个或者多个空格后接着grep的行;
“.*” : 匹配任意字符;
“\?” : 零次或者壹次,前面的字符可有可无,如”gr\?ep”,代表可以是grep,ep;
“\{m\}” : 重复m次,如”grep\{2\}”,匹配包含至少2个”grep”的行;
“\{m,\}”: 重复字符至少m次,如”grep\{2,\}”匹配至少有2个grep的行;
“\{m,n\}”: 重复字符至少m次,至多n次,如”grep\{2,3\}”匹配2至3个grep的行;
POSIX字符:
[:alnum:] :文字数字字符;
[:alpha:] : 文字字符;
[:digit:] : 数字字符;
[:graph:] : 非空字符(非空格、控制字符);
[:lower:] : 小字字符;
[:print:] : 非空字符,包括空格;
[:space:] : 所有空白字符(新行、空格、制表符);
[:upper:] : 大写字符;
[:punct:] : 标点符号;
实例四、显示文件“/tmp/test.grep”中单词为“Grep”、“grep”
命令:grep �n “[Gg]rep” /tmp/test.grep
实例五、显示文件“/tmp/test.grep”中以“grep”开头的行
命令:cat /tmp/test.grep | grep ^grep
实例六、显示文件“/tmp/test.grep”中以“grep”结尾的行
实例七、显示/tmp/test.grep中以至少一个空白字符结尾的行;
命令:grep -n "[[:space:]]\{1,\}$" /tmp/test.grep