Linux-2020-spring-4-8
跳到导航
跳到搜索
复习
- 通配符
- 重定向
- 命令行参数
find 命令
- 从目录树中搜索文件(默认是递归查找)
- -name选项默认支持通配符
$ find . -name '*.txt'
$ find / -name 'find' # 文件的名字是find
Permission denied(报错)
为了不再屏幕上显示错误信息?重定向,或者以root权限来做
$ find / -name 'find' 2> x.txt
$ find / -name 'find' 2> /dev/null # 黑洞输出设备
$ sudo find / -name '??????????' :查找文件名字为十个字符的文件,以root的名义
egrep命令
- grep:查找并输出可以匹配指定模式的所有行(我猜对应的英文缩写:get RE pattern;另一个解读是global search RE and print out the lines)
egrep执行效果与grep -E相似,使用的语法及参数可参照grep指令,与grep的不同点在于解读字符串的方法。egrep是用extended regular expression语法来解读的,而grep则用basic regular expression 语法解读,extended regular expression比basic regular expression的表达更简单,不用频繁使用转义符\backslash。
- 一些例子
$egrep 'int' main.c $egrep -n 'int' # ctrl+d或记为^D,表示输入结束,-n表示同时输出行号 $egrep -n '[ijklm]nt' $egrep -n '[^0-9]nt' $egrep -n '[0-9]nt' $egrep -n '.nt' $egrep -n 'a*bc' $egrep -n 'a*?bc' $egrep -n 'a?bc' $egrep -n '[0-9]*bc' $egrep -n 'abc|bcd' $egrep -n '(abc|bcd)[0-9]+' $egrep -n '^(abc|bcd)' $egrep -n '^(abc|bcd)$'
- egrep还有一些选项很有用,如
-o -A -B
正则表达式 regular expression
推荐大家采用我的最新讲义来系统学习RE,目前未定稿,欢迎大家提出问题和建议:链接为文件:Linux-RE.pdf
- 定义Definition:RE是满足正则语言语法的一个字符串,作为一个抽象的模式,用以匹配一个、多个甚至无穷多个实际的字符串。
例子都在上面。
- literal字面意思
- [ ] 字符集, [^ ]补集'
- 自定义字符集
\w [ [:alphanum:]] \d [ [:digit:]] \s
- . 任意一个字符,不能匹配\n\r
- 重复修饰符(默认为贪心greedy匹配最长的字符串)
* 表示前面的字符匹配0次到n次
? 表示可取0个/1个
+ 重复一次到无穷多次
{3} 重复3次
{3,5} 3次到5次
{3,} 3次到无穷
- 分组group ()
- | 或Alternation
- 定位符anchoring
^表示行首 $表示行尾 \< \>表示单词的首/尾 \b表示单词边界 \B表示非单词边界
- 通配符和正则表达式的对应
* ? .* .
一些讨论
- 正则语言所处的位置
正则语言:正则表达式所能表达的所有字符串的集合:OR符合正则语言语法的所有RE的集合(这两个意思是不同的,需要琢磨一下,我倾向于后者) 上下文无关语言:context-free language 程序语言:program language 自然语言:natural language
课堂讨论
重复修饰符:表示前一个单元(作为整体、不可分割)的重复次数
优先级:分组(括号)> 重复 > 拼接 > 或(|)
补充学习
find
根据文件的访问(修改)时间? 根据文件大小?