Linux基础---13三剑客及正则表达式

news2025/1/20 22:12:14

一.划水阶段

首先我们先来一个三剑客与正则表达式混合使用的简单示例,大致了解是个啥玩意儿。下面我来演示一下如何查询登录失败的ip地址及次数。

1.首先,进入到 /var/log目录下

cd /var/log

效果如下

在这里插入图片描述

2.最后,输入如下指令即可查看:

grep 'Failed password' secure | grep -Po "(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)" |sort -n |uniq -c

效果如下:

在这里插入图片描述

二. 修炼阶段

下面我将把三剑客参数表格集锦都无私奉献与你,请大侠们多多练习,都是基础。冰冻三尺,非一日之寒。

1.grep参数表格

参数解释
-n显示行数
-c统计行数
-i不区分大小写
-w精准匹配
-o只显示匹配的结果
-A1after 同时打印搜索结果行的后1行
-B2before 同时打印搜索结果的前2行
-C3center 同时打印搜索结果的上下各3行
-E正则表达式
-P使用perl正则

ps:表格只适用于将下面实例都实操理解后使用。

实例1:过滤出test.txt文件含有tcp的行并且显示行数

grep -n 'tcp' test.txt

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

实例2:在test.txt文件中精准匹配出tcp

grep -w 'tcp' test.txt

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

实例3:只过滤tcp三个字母并且统计行数

grep -oc 'tcp' test.txt

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

实例4:过滤出含有ftp,ssh,telnet的行

grep -E 'ftp|ssh' test.txt

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

实例5:过滤所有数字

grep -P '\d+' test.txt

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

实例6:过滤5位数字

grep -P '\d{5,}' test.txt

效果如下在这里插入图片描述

2.sed参数表格

参数参数解释动作动作解释
-n只将目标行列出a在指定行后面插入一行
-r延伸型正则d删除
-r修改源文件i在指定行前面插入一行
p打印
s替换

ps:表格只适用于将下面实例都实操理解后使用。

例1:在test.txt文件里复制行数据里有字母a的

sed '/a/p' test.txt

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

例2:只打印出含有a字母的行

sed -n '/a/p' test.txt

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

例3:在test1.txt文件中过滤掉带有tcp的行

sed '/tcp/d' test1.txt

效果如下,
在这里插入图片描述

在这里插入图片描述

过滤其实有删除的意思在,只不过它只留存在表面上,也就是将删除这几行的结果打印到终端上给你看,但不在原文件里面删除。若要删除原文件里面的内容,只需要在原来的命令上加一个 -i参数即可。

sed -i '/tcp/d' test1.txt

例4:过滤掉以#号开头的行

sed '/^#/d' test1.txt

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

同理若要删除原文件里面的内容,只需要在原来的命令上加一个 -i参数即可。

sed -i '/^#/d' test1.txt

例5:过滤掉1到10行的数据

sed '1,10d' test1.txt

同样,如果你只想过滤第5行:

sed '5d' test1.txt

例6:在第3行后面插入hello

sed '3a hello' test.txt

效果如下:
在这里插入图片描述
值得注意的是,这里没有加-i参数,代表的是修改的不是原文件,只是把你的操作结果给你打印出来而已。如果你要修改原文件的内容,直接加-i参数即可(sed通用)。添加后命令如下:

sed -i '3a hello' test.txt

顺便说一下,这里的3a代表的是在第三行后面添加,那么3i表示的便是在第三行前面添加

例7:将hello替换为world

sed 's#hello#world#' test.txt

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

例8:将每行第一个字母o改为x

sed 's#o#x#' test.txt

效果如下:
在这里插入图片描述
如果你想要把所有的o替换成x,那我们就在末尾加一个g,表示全局替换

sed 's#o#x#g' test.txt

如果你想吧所有的o和O替换成x,也就是不区分大小写,那么就在末尾加一个I,表示忽略大小写

sed 's#o#x#gI' test.txt

3.awk

awk+ ' ' +文件

操作解释
{print $1}打印第一列
{print $1,$2}打印第一列和第二列
{print $NF}打印最后一列
“xxx”双引号里面添加文字信息
NR表示行号
/xxx/表示查找特定信息
~表示查找含有特定信息

ps:表格只适用于将下面实例都实操理解后使用。

例1:在test3.txt中打印出第一列

awk '{print $1}' test3.txt

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

例2:在test3.txt中打印出最后一列

awk '{print $NF}' test3.txt

在这里插入图片描述

例3:在test3.txt中打印出第一列和最后一列

awk '{print $1,$NF}' test3.txt

结果如下:
在这里插入图片描述

例4 :将第一列和第二列与第三列的乘积结果显示出来

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

结果如下:
在这里插入图片描述若是要在其中加入文字说明,则可以加" "

awk '{print $1,“total:”,$2*$3"$"}' test4.txt

在这里插入图片描述

例5:取第一行的数据

awk 'NR==1' test4.txt

效果如下:
在这里插入图片描述
NR表示行号的意思,下面列出几个扩展:
NR>5 :表示取出行号大于5的行数据
NR<=5 :表示取出行号小于等于5的行数据
NR<=5 && NR>1 :表示取出行号小于等于5并大于1的行数据
NR==5 || NR<=2 :表示取出行号等于5或小于等于2的行数据

例6:取出含有特定信息的行

awk '/hat/' test4.txt

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

例7:指定分隔符输出目标结果

awk -F ':' '{print $1}' /etc/passwd

例8:找出第一列数据中有h字母的,并取出第一列和第七列的数据

awk -F ':' '$1~/h/{print $1,$2}' /etc/passwd

我们稍微分解一下:$1~/h/ 表示取第一列数据中有h字母的,~esc键下面那个键。
{print $1,$2} 就很简单,就是打印第一列和第二列。

三.进阶阶段

符号解释
^表示以什么开头
$表示以什么结尾
^$空行
.代表任意字符
\转义字符
*重复0次到多次
重复0次到多次
+重复1次到多次
.*匹配所有字符
^.*任意多个字符开头
[0,9]匹配0和9两个字符
{n,m}表示n-m位
[a-z],[A-Z],[0-9]匹配字符集合内任意一个字符
[^0-9],[^A-Z],[^a-z]不包含数字和字母

例1:找出以t开头的行数据

grep '^t' test.txt

效果如下:
在这里插入图片描述若我们要找出不是以t开头的行数据,我们就可以加一个-v参数,意思是取反。

grep -v '^t' test.txt

例2:找出以cp结尾的行数据

grep  'cp$' test.txt

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

例3:删除所有的空行

sed '/^$/d' test.txt

之前我们记录sed的时候,也说了这里的删除并不是删除原文件的内容,而是将处理好的结果打印出来给你看。所以要删除原文件的所有空行,我们就需要加一个-i参数:

sed -i '/^$/d' test.txt

例4:找出xia的行数据(x是未知数)

grep '.ia' test.txt

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

例5:找出含有.ia行数据

若我们要找出含.的数据,我们需要在.前面加一个\。因为.本身就代表一个字符,\是转义字符,旨在将特殊意义的字符回归它本来的意义。

grep '\.ia' test.txt

效果如下:
在这里插入图片描述
相比于例4,包含lia的行数据就被舍弃了。例4中的.代表的是一位字符,而例5则是代表普通符号.

例6:删除所有的注释

  1. 首先,查找所有含注释的行数据
grep '#.*' test1.txt 

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

  1. 其次,将所有的注释都变成空。也就是删除所有的注释。
sed -i 's/#.*/ /g' test.txt

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

  1. 最后,删除所有的空行
 sed -i '/^$/' test2.txt

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

例7:筛选0-9的数字,a-z或A-Z的字母

grep '[0-5]' test1.txt

在这里插入图片描述
当然我们还可以将0-9和a-z混合使用,比如我要筛选出0-9和a-f的数据,就可以这么玩:

grep '[0-9a-f]' test2.txt

在这里插入图片描述
还有一个值得说的,就是我们若是只要筛选两个数字呢,我们可以这么写:

grep '[2,9]' test1.txt

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

除此之外,我们还可以搭配^取反符使用:

  1. 不要数字
grep '[^0-9]*' test.txt

在这里插入图片描述

  1. 不要小写字母
grep '[^a-z]*' test1.txt

在这里插入图片描述

  1. 不要字母和数字
grep '[^a-zA-Z0-9]*' test1.txt

在这里插入图片描述

例8:筛选出7-15位的ip地址的行数据

ip地址范围是:0.0.0.0 – 225.225.225.255 我们可以根据其位数特点来匹配它。我们可以这么写:

grep '[0-9.]{7,15} /var/log/secure

其中{7,15}表示的匹配[0-9]数字匹配7-15次,大致可以理解为匹配7-15位的数字。我们特意在0-9后面加了一个.,更加符合ip地址的格式
我们还可以跟进一步,如果我们只要它显示出ip地址,我们可以加一个-o参数。

grep -Eo'[0-9.]{7,15} /var/log/secure

这里的E表示使用正则表达式,其实你会发现没有E也能使用^$等这些符号。这些特殊符号就是正则表达式。

例9:高阶混合用法

我们可以更加精确的匹配出ip地址

ip addr | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}'

如果是理解了例8,这例子也不难理解。例8那样的方式也可以匹配出88888888这样的8位数字,用上述命令就更加贴合ip地址的格式,也就更好的匹配出ip地址了。

当然如果你还想取出登录失败用户的ip地址,可以这么玩:

grep 'Failed password' /var/log/secure | grep -Eo '[0-9]{1,3}\.[0-9]+'

还不够,我们还可以取root用户登录时间

lastlog|sed -n '/root/p' | grep -Eo '[0-9]{2}:[0-9]{2}:[0-9]{2}'

例10:\d 和[0-9]区别

\d 和 [0-9] 在某种意义上是一样的,都表示输出0-9数字。在这里插入图片描述

区别就在于\d 属于perl正则,搭配-E 匹配的是d字母,只有搭配-P才是匹配数字在这里插入图片描述

文章到这里终于结束了,笔记整理不易,请点点收藏和关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2153605.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【读书笔记-《网络是怎样连接的》- 0】全书整体结构

网络是计算机相关课程中的重要部分&#xff0c;更是当今的学习生活中所不可或缺的。虽然相关的经典书籍很多&#xff0c;但是大多数属于深入某一部分的专著&#xff0c;比如TCP/IP协议。像我这样对于网络一知半解的同学来说&#xff0c;更需要一种覆盖网络全貌&#xff0c;每一…

《线性代数》笔记

文章目录 1 行列式1.1 克拉默法则1.2 基本性质1.3 余子式 M i j M_{ij} Mij​1.4 代数余子式 A i j ( − 1 ) i j ⋅ M i j A_{ij} (-1)^{ij} \cdot M_{ij} Aij​(−1)ij⋅Mij​1.5 具体型行列式计算&#xff08;化为基本型&#xff09;1.5.1 主对角线行列式&#xff1a;主…

Python学习——【4.2】数据容器:tuple元组

文章目录 【4.2】数据容器&#xff1a;tuple元组一、元组的定义格式二、元组的特点三、元组的操作&#xff08;一&#xff09;常见操作&#xff08;二&#xff09;循环遍历 【4.2】数据容器&#xff1a;tuple元组 一、元组的定义格式 为什么需要元组 列表是可以修改的。如果想…

seL4 Untyped(二)

链接: Untyped Untyped 这篇主要是针对seL4物理内存管理的介绍。 物理内存 在seL4系统中&#xff0c;除了内核占用的一小部分静态内存之外&#xff0c;其他的所有的物理内存都是用户一级管理的。seL4在启动时创建的对象能力&#xff0c;以及seL4管理的其余物理资源&#xf…

初始网络编程(下)

所属专栏&#xff1a;Java学习 1. TCP 的简单示例 同时&#xff0c;由于 TCP 是面向字节流的传输&#xff0c;所以说传输的基本单位是字节&#xff0c;接受发送都是使用的字节流 方法签名 方法说明 Socket accept() 开始监听指定端口&#xff08;创建时绑定的端口&…

十七、RC振荡电路

振荡电路 1、振荡电路的组成、作用、起振的相位条件以及振荡电路起振和平衡幅度条件&#xff0c; 2、RC电路阻抗与频率、相位与频率的关系曲线; 3、RC振荡电路的相位条件分析和振荡频率

信息安全数学基础(15)欧拉定理

前言 欧拉定理是数论中的一个重要定理&#xff0c;它建立了模运算下指数与模的互质关系。这个定理在密码学、信息安全等领域有着广泛的应用&#xff0c;特别是在公钥密码体制&#xff08;如RSA加密算法&#xff09;中。 一、表述 设 n 是一个正整数&#xff0c;a 是一个与 n 互…

Tomcat服务器—Windows下载配置详细教程

一、关于 1.1 简介 Tomcat是一个开源的Java Servlet容器和Web服务器&#xff0c;由Apache软件基金会维护。它实现了Java Servlet和JavaServer Pages (JSP) 规范&#xff0c;用于运行Java Web应用程序。Tomcat支持多种Java EE功能&#xff0c;并提供了高效的性能和可扩展性&am…

Spring扩展点系列-MergedBeanDefinitionPostProcessor

文章目录 简介源码分析示例示例一&#xff1a;Spring中Autowire注解的依赖注入 简介 spring容器中Bean的生命周期内所有可扩展的点的调用顺序 扩展接口 实现接口ApplicationContextlnitializer initialize AbstractApplicationContext refreshe BeanDefinitionRegistryPos…

记录一个英语听力网站的开发

背景 在当前全球经济衰退的背景下&#xff0c;国内IT相关工作的竞争日益激烈。为了获得更多的职业机会&#xff0c;学习英语或许能为程序员打开一扇新的窗户。尤其是在国际化背景的远程工作中&#xff0c;英语协作沟通是必不可少的。 尽管我们大多数人从小到大都在学习英语&a…

使用Renesas R7FA8D1BH (Cortex®-M85)和微信小程序App数据传输

目录 概述 1 系统架构 1.1 系统结构 1.2 系统硬件框架结构 1.3 蓝牙模块介绍 2 微信小程序实现 2.1 UI介绍 2.2 代码实现 3 上位机功能实现 3.1 通信协议 3.2 系统测试 4 下位机功能实现 4.1 功能介绍 4.2 代码实现 4.3 源代码文件 5 测试 5.1 编译和下载代码…

RNN的反向传播

目录 1.RNN网络&#xff1a;通过时间反向传播(through time back propagate TTBP) 2.RNN梯度分析 2.1隐藏状态和输出 2.2正向传播&#xff1a; 2.3反向传播&#xff1a; 2.4问题瓶颈&#xff1a; 3.截断时间步分类&#xff1a; 4.截断策略比较 5.反向传播的细节 ​编辑…

大数据新视界 --大数据大厂之JavaScript在大数据前端展示中的精彩应用

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

浙大数据结构:05-树8 File Transfer

数据结构MOOC PTA习题 这道题考察并查集的操作&#xff0c;合并以及找根结点 机翻&#xff1a; 1、条件准备 node是数组存放1-N结点的根节点的&#xff0c;n为总结点数 #include <iostream> using namespace std;const int N 1e4 5; int node[N]; int n; 先初始化…

众数信科AI智能体政务服务解决方案——寻知智能笔录系统

政务服务解决方案 寻知智能笔录方案 融合民警口供录入与笔录生成需求 2分钟内生成笔录并提醒错漏 助办案人员二次询问 提升笔录质量和效率 寻知智能笔录系统 众数信科AI智能体 产品亮点 分析、理解行业知识和校验规则 AI实时提醒用户文书需注意部分 全文校验格式、内…

【在Linux世界中追寻伟大的One Piece】进程间关系与守护进程

目录 1 -> 进程组 1.1 -> 什么是进程组 1.2 -> 组长进程 2 -> 会话 2.1 -> 什么是会话 2.2 -> 如何创建会话 2.3 -> 会话ID(SID) 3 -> 控制终端 4 -> 作业控制 4.1 -> 什么是作业(job)和作业控制(Job Control) 4.2 -> 作业号 4.3…

Spring:项目中的统一异常处理和自定义异常

介绍异常的处理方式。在项目中&#xff0c;都会进行自定义异常&#xff0c;并且都是需要配合统一结果返回进行使用。 1.背景引入 &#xff08;1&#xff09;背景介绍 为什么要处理异常&#xff1f;如果不处理项目中的异常信息&#xff0c;前端访问我们后端就是显示访问失败的…

20240921在友善之臂的NanoPC-T6开发板上确认宸芯的数传模块CX6602N的AT命令

console:/dev # cat ttyUSB1 & console:/dev # echo AT > ttyUSB1 20240921在友善之臂的NanoPC-T6开发板上确认宸芯的数传模块CX6602N的AT命令 2024/9/21 21:03 【必须】Android12/Linux&#xff08;Buildroot&#xff09;都必须要&#xff01; 4、【Android12默认打开U…

电脑硬件-机械硬盘

简介 机械硬盘是电脑的主要存储媒介之一&#xff0c;通常用于存储一些文件资料或者学习视频笔记等比较大的内容。 结构 采用磁盘存储数据&#xff0c;使用温彻斯特的结构&#xff0c;特有四个特点&#xff1a; 1.磁头、盘片和运动机构安装在一个密封的腔体内。 2.盘片告诉旋…

一图快速看懂flink source的设计实现

文章目录 整体来说多个处理流程是解偶的&#xff0c;这样可以在面对多数据源情况下&#xff0c;能更加的灵活。 下面只展示了&#xff0c;主要的一些流程 下面补充一点&#xff0c;读取文件状态的保存&#xff0c;切分信息用了一个 ListState 来保存。具体要保存的信息&#x…