正则表达式
基本正则表达式
字符 | 作用 |
---|---|
^ | 匹配行首 |
$ | 匹配行尾 |
[] | 集合,匹配集合中的任意单个字符 |
[^] | 对集合取反 |
. | 匹配任意单个字符 |
* | 匹配前一个字符任意次数 (不能单独取用) |
.* | .和*的合用,表示匹配全部字符 |
\{n,m\} | 匹配前一个字符n到m次 |
\{n\} | 匹配前一个字符n次 |
\{n,\} | 匹配前一个字符n次以上 |
\{\} | 保留 |
拓展正则
+ | 前一个字符最少匹配一次 |
---|---|
? | 前一个字符最多匹配一次 |
{n,m} | 匹配n到m次 |
() | 组合为整体,保留 |
| | 或者 |
\b | 边界 |
1.过滤工具egrep:
egrep和grep -E一样,支持扩展正则
egrep [选项] 文件
选项:
-i:忽略大小写
-v:取反
-c:统计行数
-q:无输出,静默($?为0,说明有匹配,否则相反)
-n:显示行号
–color: 匹配内容标红
$:最后的
^:开头
2.编辑工具sed:
sed [选项] ‘指令’ 文件
选项:
-n:屏蔽默认输出
-i:直接修改文件内容
-r:启用扩展正则,与其他选项需作为首个选项
指令:
p:打印行
d:删除行
s:替换字符串
i:行前插入
a:行后插入
c:替换行内容
r:读取文件
w:保存到文件
sed -n ‘
1,6p
’ xx.log
sed -i ‘1,6d
’ xx.log
sed -i ‘s/xx/aa/g
’ xx.log (g表所有,可填数字,表替换第几个字符,不填默认第一个)
sed -i ‘2i
test’ xx.log
sed -i ‘2a
test’ xx.log
sed -i ‘2c
test’ xx.log
sed -i ‘2r
test.txt’ xx.log (第二行下插入文本test.txt)
sed -i ‘2,4r
test.txt’ xx.log (第二行到第四行下都插入文本test.txt)
sed -i ‘2w
new.txt’ xx.log (第二行保存为新文本new.txt)
sed -i ‘2,6w
new.txt’ xx.log (第二行到第六行保存为新文本new.txt)
sed -i ‘$a
minlen=8 dcredit=-2 ucredit=-1 lcredit=-1 ocredit=-1 enforce_for_root’ /etc/pam.d/system-auth (尾行追加)
sed -i ‘s%
#ClientAliveInterval 0%
ClientAliveInterval 300%
’ /etc/ssh/sshd_config (替换文本)
3.处理工具awk:
awk [选项] ‘条件{指令}’ 文件
过滤时机
BEGIN{} | 读入前处理动作 |
---|---|
{} | 逐行处理 |
END{} | 处理完最后一行后执行 |
选项: | |
-F:指定分隔符 |
内置变量:
NF:记录列数
NR:记录行数
$n:表示第n列
$0:整行
(awk ‘$3 ~/abc/ {print $0}’ test.txt)
正则表达
~ :匹配
!~:不匹配
数值比较(== 、 !=、 >、 >=、 <、 <=)
运算符(+、-、*、/、%、++、–、-=、+=、*=、/=)
逻辑比较
逻辑与&&
逻辑或 ||
显示登录失败的ip
awk '/Failed/{print $11}' /var/log/secure
显示第三列是123的行
awk '$3=="123"{print $3}' test.log
统计300以内能被4和7整除的数
seq 300 | awk 'BEGIN{a=0}($0%4==0)&&($0%7==0){a++}END{print a}'
统计日志登录的ip次数
last -f /var/log/wtmp |awk '{ip[$3]++}END{for(a in ip){print ip[a],a}}' |sort -nr
匹配字符修改第二列的值,输出到新文件
awk '/ClientAliveInterval/{$2="200"}{print}' /etc/ssh/sshd_config > /tmp/2
匹配字符修改源文件内容,"/etc/ssh/sshd_config"要加双引号
awk '/ClientAliveInterval/{$2="100"}{print > "/etc/ssh/sshd_config"}' /etc/ssh/sshd_config
location匹配规则
~ | 正则匹配,区分大小写(加上!则为不匹配) |
---|---|
~* | 正则匹配,不区分大小写(加上!则为不匹配) |
\ | 转义字符 |
(jpg|gif|png) | 匹配jpg或gif或png |