grep文本查看工具及正则表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了grep文本查看工具及正则表达式相关的知识,希望对你有一定的参考价值。
grep文本查看工具及正则表达式
grep:搜索及过滤文本工具:
(根据用户所指定的“模式”搜索,过滤条件”对目标文件进行过滤性匹配);grep自带正则表达式引擎工具。
所谓模式:由正则表达式所得元字符及普通文本字符所编写出来的过滤条件"模式"
grep:三种支持模式:
- grep:基本正则表达式
- egrep:支持扩展正则表达式
- fgrep :不支持正则表达式
- 三种支持模式因其可以(grep -E:切换扩展,egrep-G:切换基本,分别有以-F切换fgrep普通模式)
- 而其语法格式也大致相同所以用之其一即可;
- 语法格式:
- grep [OPTIONS] PATTERN [FILE...] 直接给定目标文件
- grep [OPTIONS] [-e PATTERN | -f FILE] [FILE..
- OPTION:
- -v: --invert-match :显示指定目标文件之外的任意字符;
- -E: --extended-regexp:支持扩展正则表达式;
- -i :--ignore-case :不区分大小写;
- -o:--only-matching:仅显示所指定模式多匹配到的字符;
- -A..:表示后..行
- -B..:表示前...行
- -C..:表示前后各....行 注意:(..)表示数字
-
简单示例:
- [[email protected] ~]# grep -i "[[:upper:]]" test
- \S
- Kernel \r on an \m
- How are you
- what is
- [[email protected] ~]# grep -o "[[:upper:]]" test
- S
- K
- [[email protected] ~]# grep -v "[[:upper:]]" test
- what is
- [[email protected] ~]# grep -C1 "^[[:upper:]]" test
- kernel \r on an \m
- How are you
- what is
分组及引用:
-
将多个单个字符捆绑在一起,当做一个整体使用或处理
- 例如:
- \(ad\)*po: 其表示括号内的内容出现零次或多次(这里的括号有其他含义所以必须加反斜杠来区分或者表明其括号的原本意义)
- 这里的分组括号中的模式所匹配的内容会被正则表达式引擎自动记录与内部的变量中,这些变量为:
- 模式从左侧起,第一个左边的括号和最后的右括号匹配的字符及之间内部出现的括号所匹配字符不能归为一起 ,是为两个模式匹配;
- 例:(a-(w+r)+p):如此括号之间不能相交只能相套,也就是说w前的左括号只能和r后的右括号相匹配;
- [[email protected] ~]# grep "\(l..e\)r" text.sh
- he lovers his lover
- he likes his liker
-
引用:
-
后向引用:引用前面分组括号中模式所匹配到的字符
- [[email protected] ~]# grep "\(l..e\).*\1" text.sh
- he lovers his lover
- he likes his liker
- 分析一下:\(l..e\)表示字符“l 和e,其之间可以出现任意两个字符” 后边的"1"表示后面的字符和前面分组括号的模式相同,
- 而中间的".*"为贪婪模式匹配模式内任意长度字符.
- 以下为示例:
- [[email protected] ~]# grep "\<[0-9]\{2\}\>" /etc/passwd
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- [email protected] ~]# grep "\(root\).*\1" /etc/passwd
- root:x:0:0:root:/root:/bin/bash
基本正则表达式元字符:
-
字符匹配:
- .:匹配任意单个字符;
- []: 匹配指定范围内的任意单个字符;
- [^]:匹配指定范围外的任意多个字符;
- 特殊字符 :[[:digit:]]\[[:lower:]].[[:upper:]].[[:alpha:]],[[alnum:]],[[:punct:]][[:space:]];
-
匹配次数:
-
用在要指定其出现的次数的字符的后面,用于限制其前面字符出现的次数;默认工作与贪婪模式;
- *:匹配其前面的字符任意次;0,1,多次; (仅表示次数);
- 例如:grep“x*y”表示x所代表的字符出现零次或者多次;
- .*: 匹配任意长度的任意字符;
- \?: 匹配其前面的字符0次或多次;及其前面的字符可有可无
- \+: 匹配其前面的字符1次或多次;即前面的字符必须有一次:
- \{m\} :匹配其前面的字符m次;
- \{m,n\}:匹配其前面的字符至少m次,至多n次;
- \{0,n\}:至多n次;
- \{m,\}:至少n次;
-
位置锚定:
- ^:行首锚定;用于模式的最左侧;
- $: 行尾锚定;用于模式的最右侧;
- ^PATTERN$:用于PATTERN来匹配正行;
- ^$:空白行;
- ^[[:space:]]*$:空行或包含空白字符的行;
- \b或\b:词首锚定,用于单词模式的左侧;
- \<或\>:词尾锚定,用于单词模式的右侧;
- \<PATTERN\>:匹配完整单词;
单词:非特殊字符组成的连续字符(字符串)都称为单词;
egrep: 支持扩展的正则表达式实现类似于grep文本过滤:
- egrep【OPTIONS】PATTERN[FILE...]
- 选项:
- -G:支持基本正则表达式
- -F:非正则表达式
-
扩展正则表达式的元字符:
-
与基本正则区别在于扩展没有转义符更为简洁;除此之外其中(\<\>,\b\b,这两者锚定不可取掉转义符)
- 或: a|b:a或者b 表示或者整个左侧或右侧
- 例如:C|cat:C或者cat (cat|CAT): cat或者CAT
- 1.[[email protected] ~]# grep -E "(w|W)" test
- what is
- Where is
- 2.[[email protected] ~]# grep -E "\<[0-9]{2,3}\>" /etc/passwd
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- 3.[[email protected] ~]# echo /etc/sysconfig | grep -Eo "[^/]+$"
- sysconfig
- 4.[[email protected] ~]# ifconfig | grep -Eo "\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>"
- 5.[[email protected] ~]# cat /etc/passwd | grep -E "^([^:]+\>).*\1$"
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
-
解析:
- 1:-E "(w|W)" test:-E是grep转扩展,(w|W)表示w或者大写W的字符:就是匹配出小w或W的字符;
- 2: "\<[0-9]{2,3}\>:\<\>表示锁定行首和行尾,里边的数字表示0-9之间的任意字符出现最少两次最多三次;
- 3:-Eo "[^/]+$":表示只显示其/以后多的字符(+表示前面必须一个或多个字符)然后锁定行尾;
- 4:"\<[1-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]\>":表示匹配出其按顺序(个,十,百)
- 出现的次数及数字大小,其表示:1到9任意数字(指个位 数)或1到9,0到9出现一次(指100以下99...)
- 或1后面的数字0到9(指100-199){2}前面的0或9出现两次,或2后面0到4,0到9(指200-249),
- 或 25后面0到5(指250-255):其含义就是匹配文本中所有0-255的数字,只要其符合或条件都可被匹配。
- 5:"^([^:]+\>).*\1$":锁定行首其括号内表示非:的行首,+:后出现多个字符\>锚定,括号内为一个整体,
- .*: 中间出现任意长度任意字符,1表示后面和前面的括号内的内容相同,$多订行尾;
- 其含义为匹配出其文本行首和行尾相同的字符行;
以上是关于grep文本查看工具及正则表达式的主要内容,如果未能解决你的问题,请参考以下文章