Linux 三剑客+正则表达式

基本正则表达式

在这里插入图片描述

扩展正则表达式

在这里插入图片描述

grep 使用

在这里插入图片描述
在这里插入图片描述

查找包含 ‘root’ 的行显示行号

grep -i 'root' pwd.txt -n 

查找包含 ‘root’ 的行统计行数

grep -i 'root' pwd.txt -c

查找空行显示行数

 grep '^$' test.txt -n

查找非空行显示行数

 grep '^$' test.txt -n -v

查找排除 #开头 的非空行

grep '^#' test.txt -v | grep '^$' -v

查找 .结尾 的行

grep '\.$' test.tx

匹配 包含5 字符,只有两位数

 grep '.5' test.txt 

匹配到 f 的字符,不管前面有什么

grep '.*f' test.txt 

按照条件匹配字符

grep '[a-z0-5]' test.txt 

按照条件排除字符

grep '[^a-z]' test.txt

sed 使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打印文件的2、3行内容

sed '2,3p' pwd.txt -n

打印包含“lp”的行

sed '/lp/p' pwd.txt -n

删除包含“daemon”的行并写入文件中

sed '/daemon/d' pwd.txt -i

删除1~5行并写入文件中

sed '1,5d' pwd.txt -i

删除10到最后一行并写入文件中

sed '10,$d' pwd.txt -i

将 dbus 替换成 abcd 并写入文件

sed 's/dbus/abcd/g' pwd.txt -i

将 abcd替换成 1234,nologin 替换成 123456 并写入文件

sed -e 's/abcd/1234/g' -e 's/nologin/123456/g' pwd.txt -i

在指定行后面(2a 第二行后)插入内容并写入文件

sed '2a 12345' pwd.txt -i

在指定行前面(10i 第十行前)插入内容并写入文件

sed '10i 12345' pwd.txt -i

换行符\n,同时插入asdfghj、nasdfghj多行内容

sed '2a asdfghj\nasdfghj' pwd.txt -i

在每行后插入指定内容,a 不加数字

sed 'a ---------' pwd.txt -i

提取 ip 地址

# 找指定行,删除开头和结尾的内容
ip addr | sed '/101/p' -n | sed 's/^.*brd //g' | sed 's/ scope.*$//g'

# 使用 -e 参数多次匹配
ip address show ens33 | sed -e '3s/^.*inet //' -e '3s/ brd.*$//p' -n

awk 使用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

打印指定列

# 列出所有列
awk '{print $0}' docker.txt 
awk '{print}' docker.txt 
# 列出第一列
awk '{print $1}' docker.txt
# 列出倒数第二列
awk '{print $(NF-1)}' docker.txt
# 列出最后一列
awk '{print $(NF)}' docker.txt 

打印多列

awk '{print $1,$2,$3}' docker.txt

打印自定义列

awk '{print "第一列:"$1,"第二列:"$2,"第三列:"$3}' docker.txt

打印指定行或多行

# 打印第五行
awk 'NR==5{print $0}' docker.txt
# 打印五~七行
awk 'NR==5,NR==7{print $0}' docker.txt 
awk 'NR==5,NR==7' docker.txt 

打印行号

# 打印所有行行号
awk '{print NR,$0}' docker.txt
# 打印5~7行行号
awk 'NR==5,NR==7{print NR,$0}' docker.txt 

打印第一行,倒数第二行,倒数第三行

awk '{print $1,$(NF-1),$(NF-2)}' docker.txt

提取 ip 地址

ifconfig ens33 | awk 'NR==2{print $2}'

指定输入分割符

awk -F ":" '{print $1,$NF}' pwd.txt 
awk -v FS=":" '{print $1,$NF}' pwd.txt 

指定输出分割符

awk -v FS=":" -v OFS=">>>>" '{print $1,$NF}' pwd.txt
awk -v FS=":" '{print $1,">>>>>",$NF}' pwd.txt
awk -v FS=":" -v OFS="\t" '{print $1,$NF}' pwd.txt

内置变量使用

# NR 打印行数,NF 打印字段数
awk -v FS=":" '{print NR,NF,$1}' pwd.txt

分开打印多个文件的行号

awk -v FS=":" '{print FNR,$1}' pwd.txt gr.txt

指定换行符

awk -v RS=":" '{print NR,$0}' pwd.txt

指定每行结尾输出内容

awk -v ORS="########" '{print NR,$0}' pwd.txt

FILENAME 变量使用

awk '{print FILENAME,$0}' pwd.txt

格式化输出打印

awk '{printf $0}' test.txt

处理文件之前执行动作

# 先打印"自我介绍开始:",在处理文本
awk 'BEGIN{print "自我介绍开始:"} {printf $0}' test.txt

处理文件之后执行动作

# 先处理文本,在打印"自我介绍完毕"
awk '{printf $0} END{print "自我介绍完毕"}' test.txt

连在一起的执行效果

awk 'BEGIN{print "自我介绍开始:"} {print $0} END{print "自我介绍完毕。"}' test.txt 

在这里插入图片描述

格式化输出表格

awk -F ":" 'BEGIN{printf "%-25s\t %-25s\t %-25s\t %-25s\t %-25s\t %-25s\t %s\n","用户名","密码","UID","GID","用户注释","用户家目录","用户使用的注释器"} {printf "%-25s\t %-25s\t %-25s\t %-25s\t %-25s\t %-25s\t %s\n",$1,$2,$3,$4,$5,$6,$7}' pwd.txt

效果:
在这里插入图片描述

正则匹配

# 打印以 /sbin/nologin 结尾的内容
awk '/\/sbin\/nologin$/{print NR,$0}' /tmp/pwd.txt

# 区间匹配以指定字符开头的内容
awk '/^lp/,/^ftp/{print NR,$0}' pwd.txt

实战演练

awk 统计 nginx 的访问 ip

awk '{print $1}' access.log |sort -n |uniq |wc -l

# 注释:
sort -n 排序
uniq    去重
wc -l   统计行数

awk 列出 nginx 访问频率最高的 10 位访客

awk '{print $1}' log.txt |sort -n |uniq -c |sort -nr |head -10

# 注释:
sort -n   排序
uniq -c   去重并显示出现次数
sort -nr  根据数值大小反向排序
head -10  显示前10行

猜你喜欢

转载自blog.csdn.net/weixin_41166785/article/details/125916186