linux grep学习整理
2015-08-30 07:47
543 查看
第一部分:补充
umask 遮罩码
目录权限为777-umask
用户为 666-umask 如果某一类用户的权限有执行权限,会自动加1
管理员的遮罩码为0022 普通用户的为0002
第二部分:文本处理工具
1、定义:
Linux文件三个本地处理工具
A:grep 文本过滤工具 ,搜索工具
B:sed文件编辑工具
C:awk文本报告生成器
Grep :Global research regular expression and printing简写
根据用户指定的模式(pattern)进行去搜索目标文本模式:由正则表达式的元字符有文本字符所填写的过滤条件
组成:由元字符 regexp(特殊字符):字符不表示字面意义,表示通配功能
正则表达式类型
基本正则bre,Grep支持基本正则表达式(默认情况下)
扩展正则ere:可利用egrep
2、 语法结构:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
选项说明:
-v显示没有匹配的项目,对结果取反
-i 不区分大小写
-o 仅显示匹配到的串,其它不显示
-E支持扩展正则表达式
PATTERN 称为模式
模式中如果是字符采用单引号‘’
如果是变量采用双引号” ”,要做替换
3、通配符glob
* 任意长度的任意字符
? 任意单个字符
[ ] 指定范围内的任意单个字符
4、基本正则表达达式元字符
第一类:字符匹配
. 匹配任意单个字符
[ ] 指定范围内的任意单个字符 例如:[abc],指定a, b,c,[aA]说明A,a
[^]表示取反的 例如[^ab] 不包括a,b的之外其它字符
字符集形式[: :]
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRp_jx_TwAACJNRGVKhQ277.jpg)
使用通过[^[:upper:]]形式,外面再加一个方括号[],
* 匹配其前面的字符任意次 例如ab*c 表明匹配字符b任意次包括0次
.* 任意长度任意字符 ,贪婪模式
第二类:次数匹配
x\{m,n\} 指定字符x,至少出现M次,至多N次
x\{m,\} 指定字符x,至少出现M次,多者不限
x\{0,n\} 至多出现N次
x\{m\}精确M次
? 表示匹配其前面的字符0次或1次,前面字符可用可无
第三类:锚定符 :出现在某个位置
行锚定:
^ 行首匹配 锚定行首
$ 行尾匹配 锚定行尾
^$ 锚定空白行
单词锚定:指连续字符
\< 锚定词首,后面为单词,例如\< root 说明是以root为词首的 \broot
\> 锚定词尾 例如 root\> root\b
锚定词词首或词尾可用 \b
\<roor\> 表示精确匹配root
第四类:针对字符分组,后面可引用
\(\ ) 例如\(aabb\) aabb为可引用字符,分组完成后后面可引用
\1表示引用第一组匹配字符 \2表示引用第二次匹配字符
例如:grep “\(l..e\).* \1r”test.txt 说明: \1表示引用第一组字符”l..e”
例如love后面引用为lover
\具有转意的字符,能够把特殊字符变为普通字符,例如\*,输出为字符*
5:扩展正值表达式
其它与基本正则表达式相同
\(\)换为―>( ) 可以用做分组
\{ }换为―>{ }
+:次数匹配,匹配其前字符至少一次
| 表示或者 a|b 表示a或者b (C|c)at 表示二个分组 不加括号表示为C、cat
练习:
3、显示/etc/passwd文件中以bash结尾的行
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqCTGSBlAABvosGc6pU399.jpg)
4、显示/etc/passwd文件中的两位数或三位数
先级的问题()的优先级高于\< { 2 }这种的写法采用扩展正值表达式
![](http://s3.51cto.com/wyfs02/M00/72/5E/wKioL1XiRqHSSjUmAAEw5zm6jvU638.jpg)
5、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRqHiFRdeAABQM2pbEVg171.jpg)
6、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqKiUnQwAABMdO_nSZY028.jpg)
![](http://s3.51cto.com/wyfs02/M00/72/5E/wKioL1XiRqLCVxFlAABcyBZKaYs120.jpg)
7、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRqOBc_zSAAA7OwGlB1k784.jpg)
8、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
![](http://s3.51cto.com/wyfs02/M01/72/61/wKiom1XiRIeBfQgnAAB6AMK3bRQ400.jpg)
9、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
目录名 pwd|egrep -o '/.*[[:punct:]]'
![](http://s3.51cto.com/wyfs02/M02/72/61/wKiom1XiRIei2hChAAA59aMTKvc478.jpg)
![](http://s3.51cto.com/wyfs02/M00/72/61/wKiom1XiRIegu2ZGAAAveNF9mao909.jpg)
基名:
![](http://s3.51cto.com/wyfs02/M01/72/61/wKiom1XiRIixPBb7AAA2ehp5rvw350.jpg)
10、找出ifconfig命令执行结果中1-255之间的数字
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqXzJofjAACspqyAFGE010.jpg)
或者 {2}表示[0-5]或者[0-9]重复2次
umask 遮罩码
目录权限为777-umask
用户为 666-umask 如果某一类用户的权限有执行权限,会自动加1
管理员的遮罩码为0022 普通用户的为0002
第二部分:文本处理工具
1、定义:
Linux文件三个本地处理工具
A:grep 文本过滤工具 ,搜索工具
B:sed文件编辑工具
C:awk文本报告生成器
Grep :Global research regular expression and printing简写
根据用户指定的模式(pattern)进行去搜索目标文本模式:由正则表达式的元字符有文本字符所填写的过滤条件
组成:由元字符 regexp(特殊字符):字符不表示字面意义,表示通配功能
正则表达式类型
基本正则bre,Grep支持基本正则表达式(默认情况下)
扩展正则ere:可利用egrep
2、 语法结构:
grep [OPTIONS] PATTERN [FILE...]
grep [OPTIONS] [-e PATTERN | -f FILE] [FILE...]
选项说明:
-v显示没有匹配的项目,对结果取反
-i 不区分大小写
-o 仅显示匹配到的串,其它不显示
-E支持扩展正则表达式
PATTERN 称为模式
模式中如果是字符采用单引号‘’
如果是变量采用双引号” ”,要做替换
3、通配符glob
* 任意长度的任意字符
? 任意单个字符
[ ] 指定范围内的任意单个字符
4、基本正则表达达式元字符
第一类:字符匹配
. 匹配任意单个字符
[ ] 指定范围内的任意单个字符 例如:[abc],指定a, b,c,[aA]说明A,a
[^]表示取反的 例如[^ab] 不包括a,b的之外其它字符
字符集形式[: :]
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRp_jx_TwAACJNRGVKhQ277.jpg)
使用通过[^[:upper:]]形式,外面再加一个方括号[],
* 匹配其前面的字符任意次 例如ab*c 表明匹配字符b任意次包括0次
.* 任意长度任意字符 ,贪婪模式
第二类:次数匹配
x\{m,n\} 指定字符x,至少出现M次,至多N次
x\{m,\} 指定字符x,至少出现M次,多者不限
x\{0,n\} 至多出现N次
x\{m\}精确M次
? 表示匹配其前面的字符0次或1次,前面字符可用可无
第三类:锚定符 :出现在某个位置
行锚定:
^ 行首匹配 锚定行首
$ 行尾匹配 锚定行尾
^$ 锚定空白行
单词锚定:指连续字符
\< 锚定词首,后面为单词,例如\< root 说明是以root为词首的 \broot
\> 锚定词尾 例如 root\> root\b
锚定词词首或词尾可用 \b
\<roor\> 表示精确匹配root
第四类:针对字符分组,后面可引用
\(\ ) 例如\(aabb\) aabb为可引用字符,分组完成后后面可引用
\1表示引用第一组匹配字符 \2表示引用第二次匹配字符
例如:grep “\(l..e\).* \1r”test.txt 说明: \1表示引用第一组字符”l..e”
例如love后面引用为lover
\具有转意的字符,能够把特殊字符变为普通字符,例如\*,输出为字符*
5:扩展正值表达式
其它与基本正则表达式相同
\(\)换为―>( ) 可以用做分组
\{ }换为―>{ }
+:次数匹配,匹配其前字符至少一次
| 表示或者 a|b 表示a或者b (C|c)at 表示二个分组 不加括号表示为C、cat
练习:
3、显示/etc/passwd文件中以bash结尾的行
grep 'bash\>' /etc/passwd 输出为
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqCTGSBlAABvosGc6pU399.jpg)
4、显示/etc/passwd文件中的两位数或三位数
grep -E '\<([0-9]{2}|[0-9]{3})\>' /etc/passwd备注:[0-9]{2}表示[0-9]重复二次,即二位数,这里注意优
先级的问题()的优先级高于\< { 2 }这种的写法采用扩展正值表达式
![](http://s3.51cto.com/wyfs02/M00/72/5E/wKioL1XiRqHSSjUmAAEw5zm6jvU638.jpg)
5、显示`netstat -tan`命令结果中以‘LISTEN’后跟0个、1个或者多个空白字符结尾的行
netstat -tan|grep 'LISTEN[[:space:]]\{,\}' 输出为
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRqHiFRdeAABQM2pbEVg171.jpg)
6、添加用户bash、testbash、basher以及nologin用户(nologin用户的shell为/sbin/nologin);而后找出/etc/passwd文件中用户名与其shell名相同的行
grep '\(\<bash\).*\1' /etc/passwd
cut -d: -f1,7 /etc/passwd
grep "\(\<bash\):.*\1" /etc/passwd 或者
grep "\(\<bash\):.*\1$" /etc/passwd
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqKiUnQwAABMdO_nSZY028.jpg)
egrep '(^[[:alpha:]]+\>).*\1$' /etc/passwd
![](http://s3.51cto.com/wyfs02/M00/72/5E/wKioL1XiRqLCVxFlAABcyBZKaYs120.jpg)
7、显示当前系统上root、centos或者user1用户的默认shell和UID (请事先创建这些用户,若不存在)
grep -E '^(root|user1|centos).*' /etc/passwd|cut -d: -f3,7
![](http://s3.51cto.com/wyfs02/M01/72/5E/wKioL1XiRqOBc_zSAAA7OwGlB1k784.jpg)
8、找出/etc/rc.d/init.d/functions文件中某单词(单词中间可以存在下划线)后面跟着一组小括号的行
grep -n '[[:alpha:]]_*.*()' /etc/rc.d/init.d/functions 其中 _*表示匹配次数包括0次
![](http://s3.51cto.com/wyfs02/M01/72/61/wKiom1XiRIeBfQgnAAB6AMK3bRQ400.jpg)
9、使用echo输出一个路径,而后egrep找出其路径基名;进一步的使用egrep取出其目录名
目录名 pwd|egrep -o '/.*[[:punct:]]'
![](http://s3.51cto.com/wyfs02/M02/72/61/wKiom1XiRIei2hChAAA59aMTKvc478.jpg)
echo '/tmp/51cto/dirname'|egrep -o '/.*[[:punct:]]'
![](http://s3.51cto.com/wyfs02/M00/72/61/wKiom1XiRIegu2ZGAAAveNF9mao909.jpg)
基名:
[root@centos71 dirname]# echo '/tmp/51cto/dirname'|egrep -o '[[:alpha:]]+$'主要考虑基名都是以字母结尾
![](http://s3.51cto.com/wyfs02/M01/72/61/wKiom1XiRIixPBb7AAA2ehp5rvw350.jpg)
10、找出ifconfig命令执行结果中1-255之间的数字
ifconfig|grep -E "\<([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-5][0-5])\>"
![](http://s3.51cto.com/wyfs02/M02/72/5E/wKioL1XiRqXzJofjAACspqyAFGE010.jpg)
或者 {2}表示[0-5]或者[0-9]重复2次
[root@centos71 /]# ifconfig|grep -E "\<([1-9]|[1-9][0-9]|1[0-9]{2}|2[0-5]{2})\>"
相关文章推荐
- 【Linux探索之旅】第二部分第六课:Nano,初学者的文本编辑器
- 【Linux探索之旅】第二部分第六课:Nano,初学者的文本编辑器
- 2015.8.23作业 Linux命令学习
- Linux操作系统及常用命令
- openwrt linux 基于iptables的流量和速度统计
- Linux软件管理之源代码以及RPM软件包管理与YUM软件包管理
- Linux的7个运行级别
- 如何在 Linux 中安装 Visual Studio Code
- Linux文件系统简介
- linux学习之用户管理篇
- Linux学习之btrfs文件系统
- Linux磁盘管理--RAID原理
- CentOS6.5(Kernel2.6) Compile PHP5.6
- linux awk命令详解
- Linux insides笔记(三)
- Note For Linux By Jes(18)-X Window 配置介绍
- linux的vsftpd配置教程-本人亲测
- Note For Linux By Jes(17)-软件安装: RPM, SRPM 与 YUM 功能
- Linux 的yum详解
- Linux How to add a new disk to LVM