十二、初识Linux三剑客
- grep(Global Regular Expression Print):强大的文本内容查找工具
- sed(Stream EDitor):流编辑器、文本内容的编辑
- awk(Alfred Aho、Peter Weinberger和Brian Kernighan三个人名的姓氏首字母):强大的数据处理工具
1.grep:检索
- 统计搜寻到的次数:-c
- 忽略大小写:-i
- 顺序输出行号:-n
- 反向输出(输出没找到的):-v
- 匹配整个单词而不是单词的一部分:-w
- 匹配整个文本行:-x
- 不显示文件名前缀:-h
- 只显示文件名:-l
1.1 正则表达式(regexp,Regular Expression)
- 基础正则表达式
- 扩展正则表达式
- Perl正则表达式
(1)匹配单个字符
-
匹配确定的某个字符 使用-i可以忽略大小写
-
匹配任意单个字符 使用.代替任意单个字符
-
匹配特殊字符 使用\元字符转义
-
匹配多个字符(字符集)中的某一个[]
-
利用字符集合区间表示[a-z] [A-Z] [0-9]
-
排除[^a-z]
(2)元字符
-
表示位置
-
匹配一行的行首/行尾:^/$
-
匹配一个字符串的边缘:
- \b 匹配单词边缘的空字符串
- \B 匹配单词边缘的非空字符串
-
匹配一个单词的两端:
- \ > 匹配一个单词的右边缘
- / < 匹配一个单词的左边缘
-
-
匹配特定字符
- 字母数字元字符: \w
- 非字母数字元字符: \W
- 空白字符: \s
- 非空白字符: \S
(3)POSIX字符集
- 所有字母和数字,等价于0-9a-zA-Z: [:alnum:]
- 所有数字,等价于0-9: [:digit:]
- 所有字母,等价于a-zA-Z: [:alpha:]
- 大写字母,等价于A-Z: [:upper:]
- 小写字母,等价于a-z: [:lower:]
- 空白: [:black:]
- 非空字符: [:graph:]
- 标点符号: [:punct:]
(4)扩展正则表达式
-
(string1|string2)匹配任意一个字符串
-
重复匹配:
- +: 重复一次或多次
- *: 重复零次或多次
- ?: 重复零次或一次
- {n,m}: 重复n到m次
(5)正则表达式优先级
运算符 | 说明 |
---|---|
\ | 转移符号 |
[] | 方括号表达式 |
() | 分组 |
* + ? {} | 限定符 |
普通字符 | 按照从左至右的顺序 |
^ $ | 定位符 |
| | 或运算 |
(6)Perl兼容正则表达式
- 数字元字符: \d
- 非数字元字符: \D
- 字母数字元字符: \w
- 非字母数字元字符: \W
- 空白字符: \s
- 非空白字符: \S
2.sed:流编辑器
定义: sed是一个非交互式文本编辑器
实现: 它从文件或标准输入中每次读取一行数据复制到缓冲区里,然后读取命令行或脚本的编辑子命令,对缓冲区的文本进行编辑
适用:
- 非常大的文本文件,使用交互型文本编辑器操作非常慢
- 编辑命令比较复杂,在普通编辑器中难以完成
- 扫描一个大文件,并且需要经过一系列的操作
-
sed [nefri] command file
-
-n: 安静模式,只输出处理的
-
-e: 不编辑源文件,默认选项
-
-f: 输出一个文件
-
-r: 支持正则
2.1 子命令
-
a: 追加
-
c: 替换行
-
d: 删除
-
i: 插入
-
p: 打印
-
s: 替换字符
3.awk:数据处理工具
AWK是一种强大的数据处理工具,AWK也是一种编程语言环境
awk [-Ffv] 'BEGIN{ commands } pattern { commands } END { commands }' file
- 指定输入分隔符,fs可以是字符串或正则表达式如-F:-F fs
- 赋值一个用户定义变量,将外部变量传递给awk:-v var=value
- 从脚本文件中读取awk命令:-f scripfile
第一步:指定BEGIN{ commands }语句块中的语句
第二步:从文件或stdin中读取一行,执行pattern{ commands }逐行扫描文件,从第一行到最后一行重复整个过程,直到读完
第三步:当读至输入流末尾时,执行END{ commands }语句块