目录
1.正则表达式
主要用来匹配字符串(命令结果,文本内容)
与通配符不同,通配符功能是用来处理文件名,而正则表达式是处理文本内容中字符
1.1元字符(字符匹配)
不表示本来的含义,在正则表达式中有特殊含义的字符
. :任意单个字符
[ ] :指定范围内的任意单个字符,示例:[zhou] [0-9]
[:alnum:]:字母和数字
[:alpha:]:任意英文大小写字符,即a-z,A-Z
[:lower:]:小写字母
[:upper:]:大写字母
[:space:]:包括所有空格
1.2表示次数
* :代表前面的字符出现,0到正无穷次
. * :代表任意长度字符
\?:0或1次,可有可无
\+ :1次到正无穷次
\{n\}:前面的字符出现n次
\{n,m\}:前面的字符出现n-m次
\{n,\}:前面的字符最少出现n次
\{,n\}:前面的字符最多出现n次
举例:
1.3位置锚定
^ :开头
$ :结尾
\b , \< :字符串的开头
\b , \> :字符串的结尾
1.4分组或其他
分组:( ) 将多个字符捆绑在一起,当作一个整体处理
2.AWK(语言)
在 Linux/UNIX 系统中,awk 是一个功能强大的编辑工具,逐行读取输入文本,默认以空格或tab键作为分隔符作为分隔,并按模式或者条件执行编辑命令。
awk(语言):读取一行处理一行
vim:把整个文件加载到内存中处理,受内存的限制
工作原理:
awk 比较倾向于将一行分成多个“字段”然后再进行处理,且默认情况下字段的分隔符为空格或 tab 键。awk 执行结果可以通过 print 的功能将字段数据打印显示。
格式:
awk [选项] '表达式{处理动作}'
选项:
-F:指定分隔符
-V:指定变量
2.1基础用法
print动作
2.2awk常见的内置变量
NF:当前处理的行的字段个数
NR:当前处理的行的行号(序数)
$0:当前处理的行的整行内容
$n:当前处理行的第n个字段(第n列)
2.3模式PATTERN
awk '模式{处理动作}'
PATTERN:根据pattern条件,过滤匹配的行,再做处理
2.3.1模式为空
如果模式为空表示每一行都匹配成功,相当于没有额外条件
2.3.2正则匹配
/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来
2.3.3 line ranges:行范围
不支持使用行号,但是可以使用变量NR 间接指定行号加上比较操作符 或者逻辑关系
比较操作符:
==, !=, >, >=, <, <=
#####逻辑
与:&&,并且关系
或:||,或者关系
非:!,取反
/pat1/,/pat2/
pat代表正则,pat1到pat2 表示从正则1到正则2
2.3.4BEGIN END
BEGIN{}:仅在开始处理文件中的文本之前执行一次
END{}:仅在文本处理完成之后执行一次
3.sed
sed 是行编辑器,从文件或管道中读取一行,处理一行
3.1基本用法
sed + 选项 + '语法' + 标准输入输出
sed自带打印功能
sed常用选项:
-n:关闭自动打印
-r:使用扩展正则表达式
-i:实际修改文件内容
-i.bak:实际修改先备份源文件在修改文件内容
3.2 sed 脚本格式
写在 ' ' 单引号中
格式:'地址+命令'组成
选项:
-p:打印
$:最后一行
q:提前退出
d:删除
a:在某行后面添加
i:在某行上面添加
c:替换某行
=:显示行号
面试题:显示几点到几点分的日志
如:显示14:20分到14:40分的日志
3.3 sed搜索替代
格式:s / 替换的字符 / 原来的字符 / 修饰符
替换修饰符:
g 行内全局替换
p 显示替换成功的行
3.4 sed 分组后项引用
格式为:sed -nr 's/ ( ) / \1 / p'
分组 s//代表查找替换 ()代表分组 \1 代表留下的组