grep与正则表达式
1、greplinux
grep文本过滤工具
做用:文本搜索工具,能够指定内容对指定文本进行匹配搜索;打印匹配的行
由正则表达式字符及文本字符编写的过滤条件,来进行逐行匹配
-- color=auto 对匹配到的文本着色显示
-v 显示不被pattern (正则表达式)匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A NUM 同时输出后NUM行
-B 同上 同时输出前NUM行
-C 同上 同时输出先后各NUM行
-e 实现多个选项间的或的关系(有正则表达式,这个基本废了)
grep –e ‘cat ’ -e ‘dog’ fileName 文件中的有cat行,和dog的行 均可以输出
-w 匹配整个单词
-E 使用ERE 扩展正则表达式
-F 至关于 fgrep,不支持正则表达式nginx
2、正则表达式git
REGEXP:由一类特殊字符及文本字符所编写的模式,其中有些字符(元字符)不表示字符字面意义,而表示控制或通配的功能
程序支持: :grep,sed,awk,vim, less,nginx,varnish等
基本正则表达式 BRE
扩展正则表达式 ERE(grep –E | egrep)
正则表达式主要就是用特定的字符按他的规定组成一串 公式同样的东西,经过他的算法去找到对应的内容正则表达式
1 . 字符匹配 算法
. 匹配任意单个字符
[ ] 匹配指定范围内的任意单个字符
[^] 匹配指定范围外的任意单个字符
[:alnum:] 所有字母和数字
[:alpha:] 所有字母 == A-Z,a-z
[:lower:] 所有小写字母
[:upper:] 所有大写字母
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符 范围更广
[:cntrl:] 不可打印的控制字符 (退格 删除 警铃 )
[:digit:] 十进制数字([:xdigit:] 十六进制数字)
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号vim
2 .匹配次数:指定前面一个的字符出现的次数bash
* 匹配前面的字符任意次,包括0次 (有多少匹配多少)
.* 任意长度的任意字符
\? 匹配前面的字符 最多1次
+ 匹配前面的字符 最少1次
{n} 匹配前面的字符 n次
{m,n} 匹配前面字符至少m次,至多n次
{,n} 匹配前面的字符 最多 n 次
{n,} 匹配前面的字符最少 n次less
3 .位置锚定:定位出现的位置ide
^ 行首锚定,用于最左侧
$ 行尾锚定
^PATTERN$ 匹配整行
\< 锚定词首 ==\b 用于单词最左侧
\>锚定词尾==\b 用于单词最右侧
\<PATTERN\> 匹配整个单词
() 将一个或多个字符绑定在一块儿 ,成为一个组,当作一个总体进行处理。
已经匹配到的内容 在后面能够用 \1 \2 \3 这样的变量逐一按匹配到的内容输出
示例: (string1+(string2))
\1 :string1+(string2)
\2 :string2
以上所述是:后向引用,引用前面的分组括号里的正则已经匹配到的字符,不是引用正则表达式自己
| 或者 示例:a|b: a 或b C|cat: C 或cat (C|c)at:Cat 或cat工具
操做题目:
1 .1 grep -i "^s.*" /proc/meminfo
1 .2 grep "^(s|S).*" /proc/meminfo
1 .3 grep "^[sS].*" /proc/meminfo
2 . grep -v "/bin/bash$" /etc/passwd
3 . grep -w "^rpc" /etc/passwd | cut -d: -f7
4 . cut -d: -f1,3 /etc/passwd | grep -w "[0-9]{1,3}$"
5 . grep "^[[:space:]]+.*" /etc/grub2.cfg
6 netstat -tan | grep “LISTEN[[:space:]]*$”
7 . cut -d: -f1,3 /etc/passwd | grep -o "^.*:[0-9]{1,3}$" |sort -nr -t: -k2
8 . grep "^(.):./\1$" /etc/passwd
9 . df |grep "^/dev/sd" | grep -o " [0-9]% " |grep -o "[0-9]"|sort –nr
3 . egrep 扩展正则表达式
egrep = grep –E
扩展正则表达式中,除了 \<\b \>\b ,其余的 基本正则表达式中的符号 \ 被省略
操做题目:
- cut -d: -f1,3,7 /etc/passwd |egrep "^(root|arno|gentoo)"
- egrep -o "^[[:alpha:]_[:space:]][[:space:]]()" /etc/rc.d/init.d/functions
- echo "/etc/rc.d/init.d/functions/" |egrep -o "[[:alnum:]]*/?$"
- echo "/etc/rc.d/init.d/functions/" |egrep -o "^/./[[:alnum:]]"|grep -o "^/./"
- last | egrep "root" |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort -nr |uniq –c
- egrep -w "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
- ifconfig | egrep -w "([0-9]{1,3}.){3}[0-9]{1,3}"
- echo "welcome to magedu linux" | egrep -o "[[:lower:]]" | sort |uniq -c |sort –nr
o
egrep "[1-9][0-9]{4,9}" fileName QQ
egrep -w "^[1-9]{2}[0-9]{4}(18|19)[0-9]{2}(0[1-9]|1[0-2])([0-2][0-9]|30|31)[0-9]{3}([0-9]|x|X)" fileName ×××
egrep -w "^1[34578][0-9]{9}" fileName 手机号
egrep -w "^[[:alnum:]_]@..com" fileName 邮箱