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

wKioL1aA7XzRlaFvAABEjxAlSQg539.png


实例二、查询文件“/tmp/testin.sh”里关键字“Linux”不区分大小写的所有行

命令:grep -v -n "Linux" /tmp/testin.sh

wKioL1aA5jjAOhK5AAA9NOARD9s711.png


实例三、显示包含大小写“Linux”关键字的所有行,并计算总数

命令:grep -v -n -c "Linux" /tmp/testin.sh

wKioL1aA5oaBR3wCAAAOHJVKJAo806.png


正则表达式:是一类字符所书写的模式,其中许多字符不表示其字面意义,而是表达控制或通配等功能。

 

正则表达式元字符,其中:

 

字符匹配:

“.”  : 匹配任意单个字符,如”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”,代表可以是grepep

“\{m\}” : 重复m次,如”grep\{2\}”,匹配包含至少2”grep”的行;

“\{m,\}”: 重复字符至少m次,如”grep\{2,\}”匹配至少有2grep的行;

“\{m,n\}”: 重复字符至少m次,至多n次,如”grep\{2,3\}”匹配23grep的行;

 

POSIX字符:

[:alnum:] :文字数字字符;

[:alpha:] : 文字字符;

[:digit:] : 数字字符;

[:graph:] : 非空字符(非空格、控制字符);

[:lower:] : 小字字符;

[:print:] : 非空字符,包括空格;

[:space:] : 所有空白字符(新行、空格、制表符);

[:upper:] : 大写字符;

[:punct:] : 标点符号;


实例四、显示文件“/tmp/test.grep”中单词为“Grep”、“grep

命令:grep –n “[Gg]rep” /tmp/test.grep

wKiom1aA5zyDryLuAABV82Vn9t0706.png


实例五、显示文件“/tmp/test.grep”中以“grep”开头的行

命令:cat /tmp/test.grep | grep ^grep

wKiom1aA6sGB4wyBAAAk5pdA23Y817.png


实例六、显示文件“/tmp/test.grep”中以“grep”结尾的行

wKiom1aA60LCl-1KAAAlPWfcNJI219.png


实例七、显示/tmp/test.grep中以至少一个空白字符结尾的行;

命令:grep -n "[[:space:]]\{1,\}$" /tmp/test.grep

wKioL1aA6_PyfN_wAABCs9OK8VU104.png