grep与正则表达式

grep与正则表达式
一、grep

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,不支持正则表达式

二、正则表达式

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:] 标点符号

2 .匹配次数:指定前面一个的字符出现的次数

* 匹配前面的字符任意次,包括0次 (有多少匹配多少)
.* 任意长度的任意字符
\? 匹配前面的字符 最多1次
+ 匹配前面的字符 最少1次
{n} 匹配前面的字符 n次
{m,n} 匹配前面字符至少m次,至多n次
{,n} 匹配前面的字符 最多 n 次
{n,} 匹配前面的字符最少 n次

3 .位置锚定:定位出现的位置

^ 行首锚定,用于最左侧
$ 行尾锚定
^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 ,其他的 基本正则表达式中的符号 \ 被省略

操作题目:

  1. cut -d: -f1,3,7 /etc/passwd |egrep "^(root|arno|gentoo)"
  2. egrep -o "^[[:alpha:]_[:space:]][[:space:]]()" /etc/rc.d/init.d/functions
  3. echo "/etc/rc.d/init.d/functions/" |egrep -o "[[:alnum:]]*/?$"
  4. echo "/etc/rc.d/init.d/functions/" |egrep -o "^/./[[:alnum:]]"|grep -o "^/./"
  5. last | egrep "root" |egrep -o "([0-9]{1,3}.){3}[0-9]{1,3}" |sort -nr |uniq –c
  6. egrep -w "([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])"
  7. ifconfig | egrep -w "([0-9]{1,3}.){3}[0-9]{1,3}"
  8. 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 邮箱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章