Linux 正则表达式
正则表达式(过滤内容)三剑客 sed,grep,awk与通配符(需注意中文与英文符号的区别EXECL里面与Linux命令行显示不一样)
' ' #单引号,所见即所得
例如1:# echo 'redhat
redhat
#不加引号,和双引号类似 支持通配符 {} *:通配符的作用方便于找出文件,大部分命令可以使用
"" #双引号,里面的特殊符号会被解析 运行
例如2:# echo "redhat
redhat zh_CN.UTF-8 libin3.com {1..5}
基础正则表达示式:^
# grep 'b
grep -n '^
sed -n '/^
awk '!/^$/' redhat.txt #!:取反,不要空行显示内容
(4). #任意一个字符,一次找一个,不会匹配空行
# grep -o '.' redhat.txt # -o:显示grep执行过程,显示每次匹配了什么
# grep -o '......' redhat.txt #......:表示一次匹配6个字符
(5)\ #\ :转义字符,恢复原型;表示只显示以.结尾的行
# grep '\.
# sed -n '/^[mn].*[!.]&/p' /tmp/rhcsa/redhat.txt
# awk '/^[mn].*[!.]$/' /tmp/rhcsa/redhat.txt
(11)sort #排序
# sort -n # -n:对数字从小到大进行排序,并且能识别数字大小
# sort -nk1 #-k:根据某1列进行排序 ,k1表示第一列
# sort -rnk1 #-r:对数字从大到小进行排序
(12)uniq #合并相邻的 相同的行 去重先sort 再使用uniq
# uniq -c #-c:显示重复了几次
扩展正则表达式:| + () {} ?
(1)+ #前一个字符连续出现1次或1次以上,要配套 grep -E,也与[]一起使用
# grep -E 'r+' /tmp/rhcsa/redhat.txt #表示r连续出现的每一行
# egrep -o '[a-Z]+' /tmp/rhcsa/redhat.txt
# egrep -o '[a-Z]' /tmp/rhcsa/redhat.txt #加上+,表示一次出现一个单词,不加表示一次出现一个字母
# awk '/[a-zA-Z]+/' /tmp/rhcsa/redhat.txt #因为a-Z ,awk不能识别
# sed -nr '/[a-Z]+/p' /tmp/rhcsa/redhat.txt | sort -n
(2)| #排除文件中的#和空行
# egrep 'redhat|redhat' /tmp/rhcsa/redhat.txt
(3)() #小括号,表示一个整体 反向引用/后向引用
(4)[] #中括号,与+,前一个字符连续出现1次或1次以上
(5){} #大括号 花括号
# 0{n,m} 前一个字符至少连续出现n次,最多连续出现了m次
# a{n}前一个数字连续出现n次
# a{n,}前一个数字连续出现至少n次
# a{,m}前一个数字连续出现最多m次
# egrep -o '0{1,3}' /tmp/rhcsa/redhat.txt
# egrep '[0-9]{17}[0-9X]' /tmp/rhcsa/redhat.txt
(6)? #前一个字符连续出现0次或1次
# egrep 'r?t' /tmp/rhcsa/redhat.txt
(7)<<>>
# sed -r 's#(.*)#<<\1>>#g' libin.txt
# sed -r 's#(.)#<<\1>>#g' libin.txt
# sed -r 's#([0-9])#<<\1>>#g' libin.txt
grep:过滤
-c:统计行数
-n:显示行号
-o:显示每一步过程
-i:不区分大小写
-w:根据单词 进行过滤
-v:取反 # ps -ef | grep crond | grep -v grep | wc -l
-A:过滤出想要的内容及接下来的几行
-E(egrep):前一个字符连续出现1次或1次以上时
sed:过滤、取行、替换、修改文件内容
# -r:在脚本中使用扩展正则表达式
#ip a s eth0 | sed -n '3p' #-n:取出eth0网卡的第三行
# ip a s eth0 | awk 'NR==3'
#-i:修改文件的内容
#-i.bak:命令会先备份
# sed -r 's#(^.*)(:x.*:)(.*$)#\3\2\1#g' /etc/passwd #调换/etc/passwd 第1列和最后1列的内容(不修改文件内容)
# awk -F":" -v OFS=: '{ print
#OSF 控制每一列之间分隔符 默认 空格
awk:切割、过滤、取列、计算统计分析
-F(FS):以什么为切割
-v:修改awk内置变量
-NR,OFS:(NR 记录号,行号 ;OFS 输出分隔符,每一列通过什么分割)
# ip a s eth0 | awk 'NR==3' | awk -F"[ /]" '{print $6}' #把ip地址切割出来
# ip a s eth0 | awk 'NR==3' | awk -F"[ /]+" '{print $3}'#把ip地址切割出来,+表示将[ /]里面空行给叠加在一块
# ip a s eth0 |awk -F"[ /]+" 'NR==3{print $3}' #找出第三行的第三列,‘找谁{干啥}’‘条件{动作}’
# ls -l `which pwd` #查看一个命令的指向
1 2 3 4 5 6 | `` :反引号 $():优先执行 先执行里面的命令 把结果留下 例如: # ls -l $(which mkdir) #该命令分解相当于执行:# which mkdir ;# ls -l /usr/bin/mkdir # touch redhat-$(date +%F).txt #该文件就为redhat-2022-03-07.txt # tar zcf /tmp/rhce/etc-$(date +%F_%w).tar.gz /etc/ #在/tmp/rhce/下就会有etc-2022-03-07_1.tar.gz |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 一文读懂知识蒸馏
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下