正则表达式:匹配的是文章中的字符
通配符:匹配的是文件名
通配符中的元字符:不表示本来的含义 ?:任意单个字符 在正则表达式中有特殊含义的字符
正则表达式:元字符的使用 自己写容易,读取别人的正则难
正则表达式:
1.代表字符
. 单个任意字符
[ ]单个字符 如果方框里写abc 匹配a或b或c
2.表示次数
*代表前面的字符出现0到正无穷次
.*代表任意长度字符
\? 0 或1次 可以有也可以无
\+ 1次到正无穷次
\{3} 前面的 字符出现3次 、{}
3.位置锚定 ^ $
\b 字符串的开头\<
\b字符串的结尾\>
4.分组或其他
分组 ()使用括号将需要组合的字符括起来
awk
一种程序语言 文本处理工具
awk 文本处理工具:
假设文件有一万行,加载一行处理一行
vim 文本处理工具,内存不足打不开超级大的文件,把整个文件加载到内存中处理,如果内存过大无法打开处理文件
awk 选项 ‘表达式{处理动作}’
选项:
-F 指定分隔符
-v 指定变量
表达式(program):awk的语言的表达式
- 不写等于没有
- 找到特定的行
常见的内建变量
FS∶ 列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
NF∶ 当前处理的行的字段个数。
NR∶ 当前处理的行的行号(序数)。
$0∶当前处理的行的整行内容。
$n∶ 当前处理行的第n个字段(第n列)。
FILENAME∶ 被处理的文件名。
RS∶ 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’
$NF:最后一段
$(NF-1):倒数第二段
处理动作
print打印 printf打印
awk内置变量
$0全文
$1第一列
$2第二列
$n第n列
NF字段的个数 倒数第一列 $NF 倒数第二列 $(NF-1)
NR显示行号
awk ‘{print $1}’
awk内置变量和shell环境中的变量会有冲突 ‘{}’
从几点几分到几点几分的日志
awk ‘/ /,/ /’
统计/etc/fstab真正单词个数
提取df的cpu占用
提取stat /tmp/
提取ip地址
ifconfig ens33 |awk 'NR==2{print $2}'
打印/etc/passwd的所有用户名
cat /etc/passwd|awk -F":" '{print $1}'
或
cat /etc/passwd|awk -F: '{print $1}'
提取文本中的IP地址和时间
##文本内容##
vim test.txt
58.87.87.99 - - [09/Jun/2020:03:42:43 +0800] "POST /wp-cron.php?
doing_wp_cron=1591645363.2316548824310302734375 HTTP/1.1" ""sendfileon
128.14.209.154 - - [09/Jun/2020:03:42:43 +0800] "GET / HTTP/1.1" ""sendfileon
64.90.40.100 - - [09/Jun/2020:03:43:11 +0800] "GET /wp-login.php HTTP/1.1" ""sendfileo
##提取##
cat test.txt |sed '2d'|awk -F"[[ ]" '{print $5"\t"$1}'
sed
sed是什么?
- sed编辑器时一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流。
- sed编辑器可以根据命令来处理数据流中的数据,这些命令**要么从命令行中输入,要存储在一个命令文本文件中。
sed的命令格式
第一种:
sed -e '操作' 文件1 文件2
第二种:
sed -n -e '操作' 文件1 文件2
第三种:
sed -f 脚本文件 文件1 文件2
第四种:
sed -i -e '操作' 文件1 文件2
sed ‘ 语法 ’
sed自己的语法
语法:
范围+操作 打印屏幕上
输出哪些行,留下哪些
sed ‘ ’
命令的选项 sed后跟的选项
sed -n 关闭自动打印 不关会打印两次
sed -r 启用扩展正则
sed -I 实际修改文件的内容
语法字母在单引号中 ‘’ p手动打印
q提前退出 3q 打印到第三行退出
d 删除 3d删除第三行
sed再不打开文件的情况下修改文件内容
a 在内容后插入 3a第三行后面追加
i在内容前插入 3i 第三行上面添加
c 替换 3c 将第三行整行替换
=显示行号
提取/etc/passwd的第三行
提取14点10分到15点20分的日志
提取前三行数字
在第三行下插入hehe
在第三行下插入hehe和haha
搜索替代
范围 s/旧字符/新字符/修饰符
替换标记:
- 数字:表明新字符串将替换第几处匹配的地方
- g : 表明新字符串将会替换所有匹配的地方
- p : 打印与替换命令匹配的行,与 -n 一起使用
- w 文件 :将替换的结果写到文件中
修改全局后面加g
sed -i 's/root/admin/g' /etc/passwd
#将全局root修改为admin
替换行内容
sed -i '2cth' text
#将第二行的内容替换为th
取反 使用感叹号
seq 10|sed -n '2!p'
#不显示第二行
修改selinux开机不自启配置文件
sed -i 's/SELINUX=enforcing/SELINUX=disabled' /etc/selinux/config
提取ip地址
ifconfig ens33 |sed -rn '2s/.*(inet)([0-9.]+) (netmask) ([0-9.]+) (broadcast) ([0-9.]+).*/\2/p'