一、正则
- 通配:大部分普通命令都支持通配符,比如ls、find等。
- 正则:linux下普通命令无法使用正则表达式,只有三剑客可以使用。
基本正则表达式:BRE (basic regular expression)
符号表 | 含义 |
---|---|
^ | 锁定行的开头,例:^root |
$ | 锁定行的结尾,例:txt$ |
* | 匹配前一个字符0次或者多次,例:te*可以匹配到t,te,tee等 |
. | 匹配任意一个且只有一个字符,不能匹配空行 |
\ | 转义字符 |
[xyz] | 匹配方括号中的任意一个字符,也可以写作[x-z] |
[^xyz] | 匹配除方括号中字符的任意一个字符 |
组合符 | 含义 |
---|---|
^$ | 表示空行 |
.* | 匹配所有内容 |
^.* | 匹配任意多的字符开头的内容 |
.*$ | 匹配任意多个字符结尾的内容 |
扩展正则表达式:ERE (extended regular expression) 使用扩展正则表达式时需携带相应选项[ -E | -r ]
符号表 | 含义 |
---|---|
+ | 匹配前一个字符1次或者多次,例:te+可以匹配到te,tee等,但不能匹配到t |
? | 匹配前一个字符0次或者1次,例:te+可以匹配到t,te |
| | 表示或者,可以同时过滤多个字符串,例:x|y可以匹配x或y |
() | 分组过滤,被括起来的表示一个集体,例:g(la|oo)d可以匹配到glad或者good |
a{n,m} | 匹配字符a,最少n次,最多m次 |
a{n,} | 匹配字符a,最少n次 |
a{,m} | 匹配字符a,最多m次 |
a{n} | 匹配字符a一共n次 |
二、grep
1、概念
文本过滤工具,适合用于筛选。
2、指令格式
grep [选项] 模式 文件名
参数选项
参数选项 | 解释说明 |
---|---|
-v | 排除匹配结果 |
-n | 显示匹配行与行号 |
-i | 不区分大小写 |
-c | 只统计匹配的行数 |
-E | 支持使用扩展正则表达式 |
-o | 只输出匹配的内容 |
-w | 只匹配过滤的单词 |
–color=auto | 为grep过滤结果添加颜色 |
3、实例
三、sed
1、概念
流编辑器,文本编辑工具,适合用于行操作。
2、指令格式
sed [选项] [脚本命令] [文件名]
参数选项
参数选项 | 解释说明 |
---|---|
-n | 取消默认sed的输出 |
-i | 直接将修改结果写入文件 |
-e | 多次编辑 |
-r | 支持使用扩展正则表达式 |
-f | 使用脚本文件 |
内置命令
内置命令 | 解释说明 |
---|---|
a\ | append,追加 |
d | delete,删除 |
i\ | insert,插入 |
p | print,打印 |
s/正则/替换内容/g | 匹配正则内容然后替换,g代表全局匹配否则只匹配每行第一个 |
匹配范围
范围 | 解释说明 |
---|---|
空地址 | 全文处理 |
单地址 | 指定文件某一行 |
/pattern/ | 被模式匹配到的每一行,可以使用正则表达式 |
范围区间 | n,m匹配到n-m行,n+d匹配到从n往下的d行 |
步长 | a~b匹配到从第a行开始以b为步长的行 |
3、实例
sed指令执行结束后变更的仅仅是模式空间中的文本内容,实际文件中并不改变,要将变化反映到文件中需要使用指定选项 -i :
使用-n可以显示对应行号:
sed匹配范围可以是指定行,也可以是某个筛选条件:
可以对同一个文件同时执行多条命令:
指令过于复杂时,可以将sed要执行的指令写入文件中,使用 -f 调用命令文件:
四、awk
1、概念
文本报告生成器,适合用于列操作,awk会将每一行按照指定分隔符进行分段,可以对指定字段进行操作。
2、指令格式
awk [选项] '脚本命令' 文件名
脚本命令:[模式][{命令}]
- 模式为空则作用范围为全局
- 命令为空则打印符合模式的行
参数选项
参数选项 | 解释说明 |
---|---|
-F | 指定分隔符 |
-f | 从脚本中读取awk命令 |
-v | 定义或修改一个awk内部的变量 |
内置变量
内置变量 | 解释说明 |
---|---|
$n | 指定分隔符后,当前行的第n个字段 |
$0 | 完整的输入记录 |
FS | 输入字段分隔符,默认是空格 |
OFS | 输出字段分隔符,默认是空格 |
RS | 输入换行符 |
ORS | 输出换行符 |
NF | 分隔后当前行一共有多少个字段,$NF可以表示分隔后的最后一列 |
NR | 当前行数 |
FNR | 各文件分别计数的行号 |
FILENAME | 当前文件名 |
ARGC | 命令行参数个数 |
ARGV | 数组,保存命令行各个参数 |
特殊关键字
- BEGIN:awk在开始处理文本之前要进行的动作。
- END:awk在处理完所有文本之后要进行的动作。
3、实例
查看文件内容
格式化输出:
一些特殊文件会使用自定义的特殊分隔符,awk可以自定义分隔符进行识别:
BEGIN&END:
使用正则表达式时需要将正则表达式放入反斜杠中:
指令过于复杂时,可以将awk要执行的指令写入文件中,使用 -f 调用命令文件:
- 目标文件:
- 指令脚本:
- 执行结果: