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

一.划水阶段

首先我们先来一个三剑客与正则表达式混合使用的简单示例,大致了解是个啥玩意儿。下面我来演示一下如何查询登录失败的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.xdnf.cn/news/146197.html

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

相关文章

OpenGL渲染管线(Rendering Pipeline)介绍

渲染管线 计算机图形学中&#xff0c;计算机图形管线&#xff08;渲染管线 或简称 图形管线、流水线&#xff09;是一个概念模型&#xff0c;它描述了t图像系统将 3D场景渲染到2D屏幕所需执行的一系列步骤。渲染管线大的可以分为三个阶段。 &#xff08;一&#xff09;应用阶段…

[UTCTF2020]sstv

用goldwave和010editor打开均未发现线索&#xff0c; 网上搜索sstv&#xff0c;豆包回答如下&#xff1a; 慢扫描电视&#xff08;Slow Scan Television&#xff0c;简称 SSTV&#xff09;是一种通过无线电传输和接收静态图像的技术。 一、工作原理 SSTV 通过将图像逐行扫描并…

【GMNER】Grounded Multimodal Named Entity Recognition on Social Media

Grounded Multimodal Named Entity Recognition on Social Media 动机解决方法特征抽取多模态索引设计索引生成框架EncoderDecoder 实体定位、实体-类型-区域三元组重建 出处&#xff1a;ACL2023 论文链接&#xff1a;https://aclanthology.org/2023.acl-long.508.pdf code链接…

[Linux] Linux操作系统 进程的状态

标题&#xff1a;[Linux] Linux操作系统 进程的状态 个人主页&#xff1a;水墨不写bug &#xff08;图片来源于网络&#xff09; 目录 一、前置概念的理解 1.并行和并发 2.时间片 3.进程间具有独立性 4.等待的本质 正文开始&#xff1a; 在校的时候&#xff0c;你一定学过《…

10 张手绘图详解Java 优先级队列PriorityQueue

PriorityQueue 是 Java 中的一个基于优先级堆的优先队列实现&#xff0c;它能够在 O(log n) 的时间复杂度内实现元素的插入和删除操作&#xff0c;并且能够自动维护队列中元素的优先级顺序。 通俗来说&#xff0c;PriorityQueue 就是一个队列&#xff0c;但是它不是先进先出的…

【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式

前言&#xff1a; 前三篇如下&#xff1a; 【速成Redis】01 Redis简介及windows上如何安装redis-CSDN博客 【速成Redis】02 Redis 五大基本数据类型常用命令-CSDN博客 【速成Redis】03 Redis 五大高级数据结构介绍及其常用命令 | 消息队列、地理空间、HyperLogLog、BitMap、…

带你0到1之QT编程:十五、探索QSplitter和QDockWidget的简单应用技巧

此为QT编程的第十五谈&#xff01;关注我&#xff0c;带你快速学习QT编程的学习路线&#xff01; 每一篇的技术点都是很很重要&#xff01;很重要&#xff01;很重要&#xff01;但不冗余&#xff01; 我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点&#xff01; …

系统架构设计师 - 案例特训专题 - 软件工程篇

案例特训专题 - 软件工程篇 软件工程篇需求分析 ★★★★结构化需求分析 SA数据流图答题技巧 面向对象设计 ★★UML 图概况用例图类图与对象图顺序图通信图状态图活动图定时图构件图包图部署图 大家好呀&#xff01;我是小笙&#xff0c;本章我主要分享系统架构设计师 - 案例特…

【刷题—双指针】复写0、三数之和、四数之和

目录 一、复写0二、三数之和三、四数之和 一、复写0 题目&#xff1a; 注意&#xff1a;题目要求是原数组上复写 思路&#xff1a; 一、确定最后一个复写的位置。定义两个变量cur等于0&#xff0c;dest等于-1&#xff0c;让cur去遍历数组。如果cur指向的元素是0&#xff0c;…

【玉米田】

题目 代码 #include <bits/stdc.h> using namespace std; typedef long long LL;const int mod 1e8; const int M 1 << 12; LL f[13][M]; int g[13]; vector<int> state; vector<int> p[M]; int n, m; bool check(int x) {return !(x & x <&…

【Linux课程学习】make/Makefile:Linux项目自动化构建工具

&#x1f381;个人主页&#xff1a;我们的五年 &#x1f50d;系列专栏&#xff1a;Linux课程学习 &#x1f337;追光的人&#xff0c;终会万丈光芒 &#x1f389;欢迎大家点赞&#x1f44d;评论&#x1f4dd;收藏⭐文章 &#x1f349;一.make/Makefile的理解&#xff1a; …

基于SpringBoot+Vue+MySQL的国产动漫网站

系统展示 用户前台界面 管理员后台界面 系统背景 随着国内动漫产业的蓬勃发展和互联网技术的快速进步&#xff0c;动漫爱好者们对高质量、个性化的国产动漫内容需求日益增长。然而&#xff0c;市场上现有的动漫平台大多以国外动漫为主&#xff0c;对国产动漫的推广和展示存在不…

【Java集合】深入了解ArrayList实现原理

概述 1.数据存储是基于动态数组实现的&#xff0c;默认初始容量为10。 2.添加数据时&#xff0c;首先需要检查元素个数是否超过数组容量&#xff0c;如果超过了则需要对数组进行扩容&#xff08;1.5倍&#xff09;&#xff1b;插入数据时&#xff0c;需要将从插入点 k 开始到数…

BMC 虚拟i2c访问PCA9545(switch芯片)后面的设备,为什么找不到PCA9545?

1.说明 1.1 背景 无意中看到PCA9545(switch芯片)后面有设备&#xff0c;但是PCA9545设备本身是连接到物理设备i2c上的&#xff0c;然而扫描该物理i2c bus&#xff0c;却找不到该设备。此篇文章主要找一下该原因的。 1.2 参考代码 当前使用的是ast2600芯片&#xff0c;可参考…

java使用ByteBuffer进行多文件合并和拆分

1.背景 因为验证证书的需要&#xff0c;需要把证书文件和公钥给到客户&#xff0c;考虑到多个文件交互的不便性&#xff0c;所以决定将2个文件合并成一个文件交互给客户。刚开始采用字符串拼接2个文件内容&#xff0c;但是由于是加密文件&#xff0c;采用字符串形式合并后&…

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;文件因其高效性和灵活性而广受欢迎。然而&#xff0c;随着模型复杂度的增加&#xff0c;GLTF文件的大小也会显著增加&#xff0c;这可能会对加载时间和渲染性能产生负面影响。为…

Redis数据结构之哈希表

这里的哈希表说的是value的类型是哈希表 一.相关命令 1.hset key field value 一次可以设置多个 返回值是设置成功的个数 注意&#xff0c;哈希表中的键值对&#xff0c;键是唯一的而值可以重复 所以有下面的结果&#xff1a; key中原来已经有了f1&#xff0c;所以再使用hse…

linux 操作系统下dhcrelay命令介绍和案例应用

linux 操作系统下dhcrelay命令介绍和案例应用 dhcrelay是一个用于DHCP&#xff08;动态主机配置协议&#xff09;中继的命令&#xff0c;主要功能是在没有本地DHCP服务器的子网中转发DHCP请求。这使得不同子网的DHCP客户端能够与位于其他子网中的DHCP服务器进行通信。 dhcrela…

基于微信小程序的购物系统+php(lw+演示+源码+运行)

基于微信小程序的购物系统 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于微信小程序的购物系统的开发全过程。通过分析基于微信小程序的购物系统管理的不足&#xff0c;创建了一个计算机管理基于微信小…

如何使用 Python 连接 MySQL 数据库?什么是 ORM(对象关系映射),如何使用

数据库是现代软件开发中的核心部分&#xff0c;而 Python 作为一种流行的编程语言&#xff0c;广泛应用于数据处理和分析工作。通常我们需要通过 Python 连接数据库并执行一些常见的操作&#xff0c;如插入、查询、更新和删除数据。在实际开发中&#xff0c;MySQL 是非常常用的…