grep:文本过滤工具
sed:流程编辑,文本编辑工具
awk:Linux文本报告生成器
基础正则表达式集合
符号 | 例子 | 作用 |
^ | ^abd | 匹配以abc单词开头的行 |
$ | abc$ | 匹配以abc单词结尾的行 |
^$ | ^$ | 表示空行 |
. | . | 除空行外的任意一个字符 |
\ | \. | 转义字符,代表转义小数点 |
* | a* | 匹配a字符连续出现0次及以上 |
.* | .* | 任意内容 |
^.* | ^.* | 匹配任意开头内容 |
.*$ | .*$ | 匹配任意结尾内容 |
[ ] | [abcd], [a-z1-9A-Z] | 匹配括号里一个字符内容,可用-代表范围 |
[^ ] | [^abcd] | 匹配除了abcd以外的字符 |
扩展正则表达式
grep -E才能生效
字符 | 例子 | 作用 |
+ | + | 匹配前一个字符1次及以上 |
? | ? | 匹配前一个字符0次及1次 |
( ) | ( ) | 括号内被视为整体 |
{n, m} | a{n, m} | 匹配a至少n次至多m次 |
{n, } | a{n, } | 匹配a至少n次 |
{n} | a{n} | 匹配a字符n次 |
{ ,m} | a{ , m} | 匹配a字符最多m次 |
| | a|b | 匹配a或者b (管道符) |
[ ]+ | [abcd]+ | 匹配abcd字符1次及以上 |
grep
语法
grep 参数 匹配条件 文件
grep -v "a*" test.txt
参数详情:
-n | 仅匹配显示行与行号 |
-v | 反转匹配 |
-i | 忽略大小写 |
-c | 只统计匹配的行数 |
-E | 使用egrep命令 |
-o | 只输出匹配的内容 |
-w | 只匹配过滤的单词 |
sed
语法
sed 参数 内置命令 文件
sed -n "/xx/p" test.txt
sed -e "s/x/a/g" -e "s/w/q/gp" test.txt
可用|(管道符)将数据给sed匹配
cat test.txt | sed -n "2,3p"
参数详情
-n | 取消默认输出,与-p一起使用 |
-i | 将修改结果写入文件,若不使用此参数修改的为内存数据 |
-e | 多次编辑,不许要管道符 |
-r | 支持正则扩展 |
内置命令详情
a | 对文本追加,在指定行后追加一行或者多行文本 |
d | 删除匹配行 |
i | 在指定行前插入一行或者多行文本行 |
p | 打印匹配行的内容,通常与-n一起使用 |
s/正则/替换内容/g | g代表全局匹配 |
匹配范围详情
无 | 全文匹配 |
单地址 | 匹配指定的行 |
/xxx/ | 被匹配到的xxx每一行 |
1,2与1,+5 | 1-2行与1-(1+5)行 |
1~2 | 第1行开始,间隔2行匹配,1,3,5......行 |
awk
语法
awk 可选参数 '模式 {动作}' 文件/数据
参数详情
-F | 指定分割字符段,默认为空格 |
-v | 定义或修改一个awk内部的变量 |
-f | 从脚本文件中读取awk命令 |
内置变量
FS | 输入字段分隔符,默认为空白字符 |
OFS | 输出字段分隔符,默认为空白字符 |
RS | 输入记录分隔符(输入换行符),指定输入时的换行符 |
ORS | 输出记录分隔符(输出换行符),输出时用指定符号代替换行符 |
NF | 当前行字段的个数 |
NR | 当前处理文本文件的行号 |
FNR | 个文件分别计数的行号 |
FILENAME | 当前文件名 |
ARGC | 命令行参数个数 |
ARGV | 数组,保存的是命令行所给定的各参数 |
模式详情
BEGIN | 在执行awk时提前预处理BEGIN命令 |
END | 在执行完命令后进行处理END后的命令 |
< | 小于 |
<= | 小于等于 |
== | 等于 |
!= | 不等于 |
>= | 大于等于 |
> | 大于 |
~ | 匹配正则,~/正则/ awk '/正则表达式/{动作}' 文件 |
!~ | 不匹配正则 |