grep与正则表达式
Linux下有文本处理三剑客 – grep sed awk
grep – 行过滤器
sed – 行编辑器(流编辑器)
awk – 报告生成器
grep
作用:只做文本过滤,挑选出满足条件的内容;
用法:grep [OPTIONS] PATTERN [FILE…]
(模式)
扩展:命令格式
command [选项] [参数]
xl create
xl 挂起
xl stop
xl start
xl console
command subcamm [选项] [参数]
grep的常用选项:
-v 取反
-E 指定使用扩展的正则表达式(默认匹配的时候使用标准的正则表达式)
egrep fgrep
-i 忽略大小写
-c 统计匹配的行数
-o 只显示匹配内容
-n 显示行号
显示行号:vi/vim,set nu,cat -n,less -N,awk
-w 固定单词 (词首锚定+词尾锚定)
PATTERN
模式匹配:grep默认支持正则表达式;fgrep默认使用字符
globbing 文件通配符:* ---- 任意长度任意字符
? ---- 任意单个字符
[] ----
[^]----
字符集
经常用来匹配文件内容
正则表达式 -- 一般用来匹配文件内容;
每一种语言所支持的正则表达式引擎是不同的,其中Perl语言的正则表达式引擎的查找效率是最高的;
1.字符匹配
. 代表任意单个字符 (a.b代表a与b中间有任意一个字符)
[] 表示中括号里面的任意一个字符 (a[cd]b表示acb/adb)
[^] 表示对中括号的内容进行取反 (a[^0-9]b代表中间不能匹配数字)
2.次数匹配
* 代表前面一个字符出现的任意次数(包括0次)(a*b代表aaaab、ab、b....)
\? 代表匹配前面的一个字符0次或1次
\+ 代表匹配前面的一个字符1次到n次
\{n\} 匹配前面一个字符n次
\{n,m\} 匹配前面的一个字符n次到m次(m>n)
\{0,m\} 匹配前面的字符0次到m次
\{m,\} 匹配前面一个字符m次以上
3.位置锚定
^ 锚定行首
$ 锚定行尾
【空行表示:^$;准确表示:^[[:space:]]*$】
\b 放在词首就是锚定词首,放在词尾就是锚定词尾
\< 锚定词首
\> 锚定词尾
-w 指定一个固定单词
4.分组
\(\) :\(word\)*:wordwordwordword将前面的字符串视为一个整体,去进行0次或多次匹配
后向引用
\(手势\)识别的原理并不复杂,它通过硬件\(捕获\)自然信号,就像相机\2图片\(信息\)那样,然后通过软件算法计算得到手的位置、姿态、\1等,处理成计算机可以理解的 \3。
示例:\(ab+\(xy\)*\)* 其中\1 = ab + \(xy\)*,\2 = xy
abxy
练习:
1、显示/proc/meminfo文件中大小s开头的行
grep -i “^s” /proc/meminfo(存储内存信息的文件)
2、显示/etc/passwd文件中不以/bin/bash结尾的行
grep -v “/bin/bashKaTeX parse error: Expected 'EOF', got '&' at position 189: … if id user1 &̲> /dev/null;the…” /etc/rc.d/rc.sysinit
7、找出”netstat -tan”命令的结果中,以“LISTEN”后跟0、1或多个空白字符结尾的行
netstat -tan | grep “LISTEN[[:space:]]"
yum install net-tools
8、添加用户bash、testbash、basher以及nologin(其shell为/sbin/nologin):而后找出/etc/passwd文件中用户名同shell名的行
useradd bash
useradd testbash
useradd basher
useradd -s /sbin/nologin nologin
grep "(1+>).\1$” /etc/passwd
9、IP地址如何匹配?
((([0-9])|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))[.]){3}(([0-9])|([1-9][0-9])|(1[0-9]{2})|(2[0-4][0-9])|(25[0-5]))
10、MAC地址如何匹配?
([0-9a-fA-F]{2}?{5}[0-9a-fA-F]{2}
[:alnum:] ↩︎