正则表达式及文本三剑客grep sed awk

正则表达式

1.元字符

bash 复制代码
.                     //匹配任意单个字符,可以是个汉字
[yang]                //匹配范围内的任意单个字符
[^y]                  //匹配处理指定范围外的任意单个字符
[:alnum:]             //字母和数字
[:alpha:]             //代表任何英文大小写字符
[:lower:]             //小写字母
[:upper:]             //大写字母
[:blank:]             //空白字符
[:space:]             //包括空格、制表符
[:cntrl:]             //不可打印的控制字符

2.表示次数

bash 复制代码
*              //匹配前面的字符任意次包括0次
.*             //任意长度的任意字符,不包括0次
\{n\}          //匹配前面的字符n次
\{m,n\}        //匹配前面的字符至少m次,至多n次
\{,n\}         //匹配前面的字符至多n次
\{n,\}         //匹配前面的字符至少n次

3.位置锚定

bash 复制代码
^                  //行首锚定, 用于模式的最左侧
$                  //行尾锚定,用于模式的最右侧
^PATTERN$          //用于模式匹配整行
^$                 //空行
\< 或 \b           //词首锚定,用于单词模式的左侧
\> 或 \b           //词尾锚定,用于单词模式的右侧
\<PATTERN\>        //匹配整个单词

4.分组或其他

grep

bash 复制代码
grep
-color=auto        //对匹配到的文本着色显示
-m                 //匹配#次后停止
-v                 //显示不被pattern匹配到的行,即取反
-i                 //忽略字符大小写
-n                 //显示匹配的行号
-c                 //统计匹配的行数
-o                 //仅显示匹配到的字符串
-q                 //静默模式,不输出任何信息
-A # after         //后#行
-B # before        //前#行
-C # context       //前后各#行
-e                 //实现多个选项间的逻辑or关系
-w                 //匹配整个单词
-E                 //使用ERE,相当于egrep
-F                 //不支持正则表达式,相当于fgrep
-f                 //file 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-r                 //递归目录,但不处理软链接
-R                 //递归目录,但处理软链接

sed

语法:

bash 复制代码
sed [选项] '脚本语法' [标准输入]

常用选项

bash 复制代码
-n        //关闭自动打印
-e        //多点编辑
-f        //从指定文件中读取编辑脚本
-r        //使用扩展正则表达式
-i.bak    //备份文件并原处编辑

脚本格式

bash 复制代码
p          //打印当前模式空间内容
Ip         //忽略大小写输出
d          //删除模式空间匹配的行
a          //在指定行后面追加文本
i          //在行前插入文本
c          //替换行为单行或多行文本

例:

bash 复制代码
sed -i.bak       //实际修改之前先备份一个带后缀的同名文件

查找11点56到12点10的日志

bash 复制代码
sed -n '/2023:11:56/,/2023:12:10/p' /var/log/messages

修改文件,找到文件并给其后缀加上er

提取IP地址

bash 复制代码
ifconfig ens33|sed -nr '2s/.*inet (.*)  netmask.*/\1/p'

提取版本号

bash 复制代码
cat text|sed -nr 's/.*-(.*).jar/\1/p'

提取文件权限

bash 复制代码
stat text|sed -nr '4s#.*([0-9]{4}).*#\1#p'
相关推荐
云边有个稻草人1 小时前
【Linux系统】进程地址空间
linux·虚拟地址空间·进程地址空间·虚拟地址空间是怎么实现的?·为什么要有虚拟地址空间?·怎么理解虚拟地址空间?
谁似人间西林客3 小时前
工厂大脑如何让汽车制造告别“救火式”运维?
运维·汽车·制造
飞飞传输4 小时前
数字化科研提速关键 构建安全可控一体化跨网数据传输体系
大数据·运维·安全
wanhengidc4 小时前
服务器中带宽的重要性
运维·服务器·网络·安全·web安全
云游牧者5 小时前
K8S故障排查三板斧-CSDN博客
运维·docker·云原生·kubernetes·k8s·容器化·故障排查
程序员老邢6 小时前
【技术底稿 32】Nginx 经典大坑复盘:本机公网域名自环代理,导致接口返回首页 / 404 实战排障
java·运维·nginx·前后端分离·技术底稿·后端部署
忧云6 小时前
开源 SSH 客户端 Netcatty:免费替代 Termius,带 AI 的现代化运维工具
运维·开源·ssh
想唱rap6 小时前
传输层协议TCP
linux·运维·服务器·网络·c++·tcp/ip
曦夜日长7 小时前
Linux系统篇,权限(二):缺省权限、最终权限的计算、文件隔离的两种方式
linux·运维·服务器
云水一下7 小时前
黑客的“猜密码”游戏:SSH暴力破解实战与Linux安全加固
linux·渗透测试·ssh·暴力破解