一.正则表达式
1.egrep过滤工具(输出匹配行):筛选出文本中指定条件的行
(1)以行为单位,逐行进行处理,默认只"输出"与表达式相匹配的"文本行"
egrep:扩展正则
grep:基本正则
(2)语法
格式1,文件(单引号)
egrep [选项] '正则' 文件
格式2,命令
命令 | egrep [选项] '正则'
(3)[选项]:
(1)-i:忽略大小写
(2)-v:去反
(3)-c:统计匹配的行数
(4)-q:无任何输出,一般用于检测命令是否执行成功
(5)-n:显示出匹配结果所在行号
(6)--color:标红显示匹配字符串
2.符号匹配规则
1.整体和或者匹配
(1)(ab):匹配包含(ab)的行
(2)| : root | bin :匹配root或者bin
2.行首尾及单字匹配
(1)^:匹配以什么开头(^abc:以abc开头的行)
(2)$:匹配以什么结尾(abc$:以abc结尾的行)
(3).:匹配任意单个字符
3.未定匹配次数
(1)+:至少匹配1次( (ab)+:一个或者多个连续的ab)
(2)?:最多匹配1次(a?:0个或1个a)
(3)*:代表次数,匹配前一个字符的0或任意次数(不可单独使用)
4.{}限定次数匹配
(1)(){n}:匹配n次( (ab){2}:匹配abab)
(2)(){n,m}:匹配n-m次数 ( (ab){1,2}:匹配ab,abab)
(3)(){n,}:至少匹配n次( (ab){2,}:匹配abab及以上的连续)
5.[]范围内单字匹配:[]内可加^取反[^]
(1)[a3?]:匹配a,3,?的行 == .
(2)[a-z]:匹配任意小写字母的行
(3)[A-Z]:匹配任意大写字母的行
(4)[0-9]:匹配任意数字的行
(5)[a-Z0-9]:匹配任意数字或者字母的行
(6)[^A-Z]:匹配包括非大写字母的行
(7)^[^a-z]:匹配非小写字母开头的行
6.转义字符的边界匹配
(1)\b:单词边界,\broot\b,严格匹配root
(2)\<:单词开头,\<th,th开头的单词
(3)\>:单词结束,一般与\<结合使用,\<root\> 等同于 \broot\b
(4)\w:匹配数字,字母,下划线,所在行,
(5)\s:匹配空白所在行,
(6)\d:匹配[0-9]的数字=[0-9],用法:grep -P '\d' user
二.sed工具
1.作用:
非交互式对文本进行增,删,改,查等操作,
逐行处理,将结果输出到屏幕
每个指令之间用//分隔:sed -rn "/^(root)|^(bin)/p" user
2.语法:
格式1:(单引号)
sed [选项] '/条件/和指令' 文件 (条件为行号或者/正则/(扩展正则加上-r),指令为参数)
格式2
命令 | sed [选项] '条件和指令'
3.选项
(1)-n:屏蔽输出,不加默认输出全部原文内容
(2)-r:启用扩展的正则表达式,不写支持基本
(3)-i:修改原文件内容,不加的时候所有操作只输出效果,不改原文件
4.指令
(1)p:(查)打印行,2,4p:打印2,3,4行,2p;4p:打印2行4行 sed -rn "/1/p" user
(2)d:(删)删除行,(!d删除不包含什么的行),2,4d:删除2,3,4行
(3)s:(改)替换,不加-n内容全部输出逐行替换
:/,可以使用#,&等,便于修改文件路径
s/a/b/4:将每行的第4个a字符替换为b字符(省略数字表示每行第一个)
s#lod#new#g:将每行所有old替换为new (改全文)
m,ns/原数据/新数据/g:指定行数替换所有匹配的内容
(4)sed文本块处理:增
(1)i:行前面插入文本,2ixx:在第2行前添加文本xx
(2)a:行后插入文本,2axx:在第2行后添加文本xx
(3)c:替换当前行,2cxx:将第二行的内容替换为xx
sed与正则结合例子:
sed -rn '/xx/s/2017/2002/g a.txt:找含有xx的行,将里面的所有2017替换成2002
5.sed特殊用法
(1)sed -n '1!p' 文件名: 输出除了第一行的内容,!表示取反
(2)sed -n '$p' xx :输出最后一行
(3)sed -n '=' xx :输出行号,$=:输出最后一行的行号
(4)sed -n '1~2p' xx :打印奇数行,1为基准,~2,起跳2行
三.awk
1.作用
将满足条件的行和列内容输出
2.语法
(1) awk [选项] '条件{指令}' 文件 ,{}表达式语句块
(2) 前置命令 | awk [选项] '条件{指令}' 文件
3.选项
-F:指定分隔符,(省略默认为空格或者Tab位)
-F"[:/]":指定多个分隔符号
4.awk行列与正则的组合:正则前面有其它操作
(1)~:正则匹配操作符
awk -F: '$1~/root/{print}' a.txt:这里的~表示连接正则
5.awk过滤时机语法:
awk 'BEGIN{}: BEGIN{}:读文件之前执行
{}: 逐行读取文件执行
END{}' :END{}读文件之后执行
a.txt
6.awk内置变量
(1)FS:与-F一样
(2)$0:当前读入的整行内容
(3)$num:第num列内容,如$1,$3分别表示第1列与第3列
(4)NF:当前行的总列数,awk '{print $NF}' b打印最后一列
(5)NR:当前的行数
7.awk条件设置
(1) ==, !+, >, <, >=, >=
(2)&&, ||
(3)+, -, *, %, /, ++, --...
例子:awk 'NF==2{print}' a.txt :打印第二行
8.awk数组
1.定义: 数组名[下标]=元素值
2.
2.遍历数组
awk 'BEGIN{a[0]=11;a[2]=33;for(i in a) {print i,a[i]}}'
3.统计某一个ip出现次数:
awk '{IP[$1]++}END{for(i in IP)print i"访问次数为:"IP[i]}' ip.txt
- 一.正则表达式
- 1.egrep过滤工具(输出匹配行):筛选出文本中指定条件的行
- (1)以行为单位,逐行进行处理,默认只"输出"与表达式相匹配的"文本行"
- (3)[选项]:
- (4)-q:无任何输出,一般用于检测命令是否执行成功
- 2.符号匹配规则
- 1.整体和或者匹配
- (2)| : root | bin :匹配root或者bin
- 2.行首尾及单字匹配
- (1)^:匹配以什么开头(^abc:以abc开头的行)
- (2)$:匹配以什么结尾(abc$:以abc结尾的行)
- 3.未定匹配次数
- (1)+:至少匹配1次( (ab)+:一个或者多个连续的ab)
- (3)*:代表次数,匹配前一个字符的0或任意次数(不可单独使用)
- 4.{}限定次数匹配
- (1)(){n}:匹配n次( (ab){2}:匹配abab)
- (2)(){n,m}:匹配n-m次数 ( (ab){1,2}:匹配ab,abab)
- (3)(){n,}:至少匹配n次( (ab){2,}:匹配abab及以上的连续)
- 6.转义字符的边界匹配
- (1)\b:单词边界,\broot\b,严格匹配root
- (3)\>:单词结束,一般与\<结合使用,\<root\> 等同于 \broot\b
- (6)\d:匹配[0-9]的数字=[0-9],用法:grep -P '\d' user
- 二.sed工具
- 1.作用:
- 每个指令之间用//分隔:sed -rn "/^(root)|^(bin)/p" user
- 2.语法:
- 格式1:(单引号)
- sed [选项] '/条件/和指令' 文件 (条件为行号或者/正则/(扩展正则加上-r),指令为参数)
- 3.选项
- (3)-i:修改原文件内容,不加的时候所有操作只输出效果,不改原文件
- 4.指令
- (1)p:(查)打印行,2,4p:打印2,3,4行,2p;4p:打印2行4行 sed -rn "/1/p" user
- (2)d:(删)删除行,(!d删除不包含什么的行),2,4d:删除2,3,4行
- (3)s:(改)替换,不加-n内容全部输出逐行替换
- s/a/b/4:将每行的第4个a字符替换为b字符(省略数字表示每行第一个)
- s#lod#new#g:将每行所有old替换为new (改全文)
- m,ns/原数据/新数据/g:指定行数替换所有匹配的内容
- (4)sed文本块处理:增
- (1)i:行前面插入文本,2ixx:在第2行前添加文本xx
- (2)a:行后插入文本,2axx:在第2行后添加文本xx
- (3)c:替换当前行,2cxx:将第二行的内容替换为xx
- sed与正则结合例子:
- sed -rn '/xx/s/2017/2002/g a.txt:找含有xx的行,将里面的所有2017替换成2002
- 5.sed特殊用法
- (1)sed -n '1!p' 文件名: 输出除了第一行的内容,!表示取反
- (2)sed -n '$p' xx :输出最后一行
- (3)sed -n '=' xx :输出行号,$=:输出最后一行的行号
- (4)sed -n '1~2p' xx :打印奇数行,1为基准,~2,起跳2行
- 三.awk
- 2.语法
- (1) awk [选项] '条件{指令}' 文件 ,{}表达式语句块
- (2) 前置命令 | awk [选项] '条件{指令}' 文件
- 4.awk行列与正则的组合:正则前面有其它操作
- awk -F: '$1~/root/{print}' a.txt:这里的~表示连接正则
- 5.awk过滤时机语法:
- awk 'BEGIN{}: BEGIN{}:读文件之前执行
- 6.awk内置变量
- (3)$num:第num列内容,如$1,$3分别表示第1列与第3列
- (4)NF:当前行的总列数,awk '{print $NF}' b打印最后一列
- 7.awk条件设置
- (3)+, -, *, %, /, ++, --...
- 例子:awk 'NF==2{print}' a.txt :打印第二行
- 8.awk数组
- 2.遍历数组
- awk 'BEGIN{a[0]=11;a[2]=33;for(i in a) {print i,a[i]}}'
- 3.统计某一个ip出现次数:
- awk '{IP[$1]++}END{for(i in IP)print i"访问次数为:"IP[i]}' ip.txt