grep 正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep 正则表达式相关的知识,希望对你有一定的参考价值。
grep 可以对文件内容过滤,默认情况是对行过滤;
grep语法格式:# grep <pattern> <arg>
实例:grep root passwd
grep 选项
-m 匹配条件后停止; # grep -m1`whoami` /etc/passwd
-i 忽略条件字符大小写
-v 显示不能被条件匹配的字符; # grep -v root /etc/passwd;不包含root的行
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息 ,结果不一样 echo $?
-A 匹配后N行
-B 匹配前N行
-C 匹配前后N行
-e 多个选项的逻辑or关系;# grep -e ‘cat‘ -e ‘dog‘ file
-w 匹配整个单词
-E 匹配支持ERE
-F 相当于fgrep,不支持正则表达式
-f 根据文件内容作为标准输入顾虑
# grep -f file.txt /etc/passwd,根据 file.txt的内容,匹配 passwd
正则表达式分类:基本正则表达式(BRE)和扩展的正则表达式 (ERE)
字符匹配:
匹配特定类型字符
. 匹配任意单个字符
[] 匹配指定范围内的任意单个字符
[^] 匹配任意范围以外的任意单个字符;
[:lower:]任意小写字母
[:upper:]任意大写字母
[:alpha:]任意大小写的字母
[:alnum:]字母和数字(大小写和数字)
[:digit:]任意十进制数字
匹配次数
* :匹配前面的字符任意次数,包括0次;尽可能的匹配;
.* :匹配任意长度的任意字符
\? :匹配器前面的字符0或1次,对前面字符可有,可无;
\+ :匹配其前面的字符至少1次;
\{n\}:匹配前面的字符n次
\{m,n\}:匹配前面的字符至少每次,最多n次;
\{,n\}:匹配前面的字符最多n次;
\{n,\}:匹配前面的字符最少n次;
位置锚定--定位出现的位置
^ 行首锚定;以什么开头
$ 行尾锚定:以什么结尾
^pattern$:用于模式匹配整行
^$ 空行
^[[:space:]]*$ 空白行
\< 或 \b :词首锚定,用于单词模式的左侧;
\> 或 \b :词尾锚定,用于单词模式的右侧;
分组\{\} : 将一个或多个字符捆绑在一起,当做一个整体处理,如\(root\)\+
\1 表示从左侧起第一个左括号以及与之匹配右括号之间的模式 所匹配到的字符;
实例:echo abcabcabc |grep "\(abc\)\{3\}"
后向引用:引用前面的分组括号中的模式所匹配字符,而非模式本身;
echo abcabcabc xyz xyz |grep "\(abc\).*\(xyz).*\1"
\1匹配的是前面的一个结果
或 :\| -- 实例 a 或 b==a\|b
egrep及扩展的正则表达式
egrep = grep -E
字符匹配
. 任意单个字符;
[] 指定范围的字符;
[^] 不在指定范围的字符;
次数匹配
* 匹配前面字符任意次数
? 可有可无0或1次
+ 1次或多次
{m} 匹配m次
{m,n}至少m数,最多n数;
位置锚定
^ 行首
$ 行尾
\< 词首or \b
\> 词尾 or \b
分组 ()
后向引用 \1,\2
或 a|b
实例
1、搜索某文件是否包含字符串
命令格式:grep "被查找的字符串" Filename1
2、在多个文件中检索某个字符串
命令格式:
grep "被查找的字符串" FileName1...
3、显示检索内容在文件中的行 “-n“ 选项
命令格式: grep -n "被查找的字符串" *.log
4、检索时需要忽略大小写问题,可以使用参数 “-i”
命令格式: grep -i "被查找的字符串" *.log
5、从文件内容查找不匹配指定字符串的行
命令格式:grep –v "被查找的字符串" FileName
搜索查找匹配的行数:
grep –c "被查找的字符串" FileName
grep "被查找的字符串" FileName | wc -l
7、递归搜索某个目录以及子目录下的所有文件
命令格式:grep –r "被查找的字符串" FileDir
8、获取哪些文件包含搜索的内容,并列出文件名
命令格式:grep -H –r "被查找的字符串" FileDir | cut -d: -f1| [uniq]
9、获取与整个搜索字符匹配的内容
命令格式:grep –w "被查找的字符串" FileName
以上是关于grep 正则表达式的主要内容,如果未能解决你的问题,请参考以下文章