文件四剑客

目录

前言

一、正则表达式

二、grep

三、find

四、sed

五、awk



前言

文件四剑客是指在计算机领域中常用的四个命令行工具,包括awk、find、grep和sed。它们在处理文本文件和搜索文件时非常强大和实用。

1. awk是一种强大的文本处理工具,它允许用户根据指定的规则处理文本文件。它可以根据字段分隔符对文本进行分割,并且可以对行、列或者多个列进行操作。它还支持条件语句、循环和函数等功能,可以进行复杂的文本处理和数据分析。

2. find是一种用于搜索文件的工具,它可以在指定的文件夹及其子文件夹中查找满足指定条件的文件。用户可以根据文件名、日期、大小等条件来搜索文件。它还支持使用正则表达式进行高级搜索。

3. grep是一种用于搜索文本的工具,它可以在文本文件中查找满足指定模式的行。用户可以根据关键字、正则表达式等条件来搜索文本。它还支持递归搜索、忽略大小写和显示上下文等功能。

4. sed是一个流编辑器,用于对文本进行编辑和转换。它可以根据指定的规则对文本进行替换、删除、插入和打印等操作。它还支持正则表达式、条件语句和循环等功能,可以进行灵活的文本处理。

这四个工具在命令行中经常被使用,它们可以单独使用,也可以结合起来实现更复杂的操作。它们在文本处理、数据分析和文件搜索等方面提供了强大而灵活的功能。


一、正则表达式

 在此之前我们先准备一份文件test.txt用来练习

##创建
vim /test.txt
##插入
shirt
short
good
food
wood
wooooooood
gooood
adcxyzxyzxyz
abcABC
best
besssst
ofion
ofson
ofison
AxyzxyzC
test
tast
hoo
boo
joo

a)查找特定字符 cat test.txt | grep -n '需要查找的内容'   其中-n表示显示行数

例如我查找hoo

 b)利用[]查找集合字符
    cat test.txt | grep -n 'w[io]' 查找以w开头并匹配其中带有i或o的内容


    cat test.txt | grep -n '[^w]'     排除开头为w的内容

cat test.txt |grep -n '^[w]'  筛选出以w开头的内容


    cat test.txt | grep -n '[a-h]oo'  筛选出含有a.b.c并有 oo的内容


    cat test.txt | grep -n '[a-c]' 筛选出含有abcd的内容

 c)查找行首"^"与行尾"$"
    cat test.txt | grep -n '^[a]' 查找a开头的内容
    cat test.txt | grep 'C$'    查找C结尾的内容

 d)查找任意一个字符"."与重复字符"*"
    cat test.txt | grep -n 'b.o'查找开头是b结尾是o的三个字符的内容
    cat test.txt | grep -n 'oooo*'查找所有oooo的内容

e)查找连续的字符范围"{}",需要使用转义符,"\{\}"  

1. `cat test.txt | grep -n 'o\{2\}'`
   这条命令首先使用cat命令将test.txt文件的内容输出到标准输出,然后通过管道(|)将其传递给grep命令进行搜索。grep命令使用`-n`选项来显示匹配行的行号,并使用正则表达式`'o\{2\}'`来匹配含有两个连续的字母o的行。

2. `cat test.txt | grep -n 'wo\{2,5\}d'`
   这条命令的操作与第一条命令类似,只是正则表达式`'wo\{2,5\}d'`用来匹配以两个到五个连续的字母o开始,并以字母d结尾的行。

3. `cat test.txt | grep -n 'wo\{2,\}d'`
   这条命令仍然与前两条命令类似,正则表达式`'wo\{2,\}d'`用来匹配以两个或更多连续的字母o开始,并以字母d结尾的行。

f)+,重复一个或一个以上的前一个字符
    cat test.txt | grep -nE 'wo+d' 或者cat test.txt | egrep -n 'wo+d'

g)?,零个或者一个前一个字符
    cat test.txt | egrep -n 'g?od'在正则表达式'g?od'中,?是一个特殊字符,表示前面的字符(这里是字母g)可出现0次或1次。因此,这个正则表达式将匹配包含“od”或“god”的行。也就是说,它匹配包含“od”或“god”的行,其中字母g可选。'

 h)|,使用或者的方式找出多个字符
    cat test.txt | egrep -n 'of|is|on'  这里是表示多个晒选条件,可以不是同一个,这里是查找带有of/is/on的内容

 i)(),查找组字符串
    cat test.txt | egrep -n 't(a|e)st'

 l)()+,辨别多个重复的组
    cat test.txt | egrep -n 'A(xyz)+C'

以下为了解:

常见正则表达式
    数字
        “^[0-9]*[1-9][0-9]*$” //正整数  
        “^((-\d+)|(0+))$” //非正整数(负整数 + 0)  
        “^-[0-9]*[1-9][0-9]*$” //负整数  
        “^-?\d+$” //整数
        “^\d+(\.\d+)?$” //非负浮点数(正浮点数 + 0)  
        “^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$” //正浮点数
        “^((-\d+(\.\d+)?)|(0+(\.0+)?))$” //非正浮点数(负浮点数 + 0)
        “^(-?\d+)(\.\d+)?$” //浮点数
    字符串
        “^[A-Z]+$” //由26个英文字母的大写组成的字符串  
        “^[a-z]+$” //由26个英文字母的小写组成的字符串  
        “^[A-Za-z0-9]+$” //由数字和26个英文字母组成的字符串  
        “^\w+$” //由数字、26个英文字母或者下划线组成的字符串
    Email
        “^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$” //email地址  
        “^([w-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.)|(([w-]+.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(]?)$”   //Email
    Url
        “^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$” //url
    IP
        “^(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5]).(d{1,2}|1dd|2[0-4]d|25[0-5])$”   //IP地址
    Tel
        /^((\+?[0-9]{2,4}\-[0-9]{3,4}\-)|([0-9]{3,4}\-))?([0-9]{7,8})(\-[0-9]+)?$/     //电话号码
    日期校验
           /^(d{2}|d{4})-((0([1-9]{1}))|(1[1|2]))-(([0-2]([1-9]{1}))|(3[0|1]))$/   //  年-月-日    yyyy-MM-dd / yy-MM-dd 格式
           "^[0-9]{4}-((0([1-9]{1}))|(1[1|2]))-(([0-2]([0-9]{1}))|(3[0|1]))$"   // 年-月- 日  yyyy-MM-dd 格式
          /^((0([1-9]{1}))|(1[1|2]))/(([0-2]([1-9]{1}))|(3[0|1]))/(d{2}|d{4})$/   // 月/日/年

 二、grep

1、grep用于筛选文件的内容 :
    -r递归扫描指定目录下的每一个文件
    -l只显示匹配到指定关键字的文件名,而不是文件内容

[root@bogon opt]# grep -lr "good" .
./test.txt
####这表示在当前目录查询那个文件内有“good”这个内容

2、案例
    查看/etc目录下所有包含bash的文件名
    grep -rl bash /etc

3、egrep完美支持正则表达式

三、find

1、find ./  -type f -prem  644 查找当前目录下权限为644的文件

[root@localhost opt]# find ./ -type f -perm 644
./test.txt
./1.sh
[root@localhost opt]# ll
总用量 8
-rw-r--r--  1 root root 767 8月  21 22:00 1.sh
drwxr-xr-x. 2 root root   6 10月 31 2018 rh
-rw-r--r--  1 root root  12 8月  21 21:59 test.txt

2、按照时间戳查找
    -atime
    -mtime
    -ctime

按照时间戳查找是指根据文件的访问时间、修改时间和状态改变时间来搜索文件的过程。在Linux系统中,可以使用find命令来进行这样的时间戳搜索。具体的时间戳搜索可以使用以下三个选项:1. -atime:根据文件的访问时间来搜索文件。访问时间指的是文件最后一次被访问的时间。使用该选项时,可以指定一个时间参数,如+n、-n或n,来搜索在指定时间范围内被访问的文件。示例:查找在过去30天内被访问过的文件find /path/to/search -type f -atime -302. -mtime:根据文件的修改时间来搜索文件。修改时间指的是文件内容最后一次被修改的时间。使用该选项时,也可以指定一个时间参数,来搜索在指定时间范围内被修改的文件。示例:查找在过去7天内被修改过的文件find /path/to/search -type f -mtime -73. -ctime:根据文件的状态改变时间来搜索文件。状态改变时间指的是文件元数据(如权限、所有者等)最后一次改变的时间。同样地,可以指定一个时间参数来搜索在指定时间范围内状态改变的文件。示例:查找在过去24小时内状态改变过的文件find /path/to/search -type f -ctime -1在这些示例中,`/path/to/search`是要搜索的目录路径,`-type f`用于限制搜索仅包括文件而不包括目录。通过这些选项,可以根据文件的访问时间、修改时间和状态改变时间来精确搜索和筛选文件。

3、-exec   find /var/spool/mail -type f -exec rm -rf {} \;
      xargs   find /var/spool/mail -type f | xargs rm -rf

查看所有邮箱中的文件并
##-execfind /var/spool/mail -type f -exec rm -rf {} \;
##xargsfind /var/spool/mail -type f | xargs rm -rf

四、sed

语法:sed [选项] '操作' 参数
        sed [选项] -f scriptfile 参数

选项
    -e:表示用指定命令或脚本处理
    -f:指定脚本文件
    -h:帮助
    -n:表示仅显示处理后的结果
    -i:直接编辑文本文件
    -r:支持扩展正则
操作
    a:增加,在当前行下面以行增加指定内容
    c:替换,将选定行替换
    d:删除,删除指定行
    i:插入,在选定行的上面插入一行
    p:打印
    s:替换,替换指定字符
    y:字符转换

1.输出符合条件的文本:
sed -n 'p' test.txt 	#相当于cat
sed -n '3p' test.txt	#打印第3行
sed -n '3,6p' test.txt	#打印第3到6行的内容
sed -n 'p;n' test.txt	#打印奇数行
sed -n 'n;p' test.txt	#打印偶数行
sed -n '1,6{p;n}' test.txt	#打印1到6行之间的奇数行
sed -n '5,${p;n}' test.txt	#从第5行开始打印奇数行
sed -n '/the/p' test.txt	#匹配the
sed -n '5,/the/p' test.txt 	#匹配从第5行开始到包含the的行
sed -n '/the/,10p' test.txt 	#匹配从包含the的行到第10行结束
sed -n '/the/=' test.txt	#打印包含the的行号
2.删除符合条件的文本nl test.txt | sed '3d'	#删除第3行nl test.txt | sed '3,5d'nl test.txt | sed '/the/d'	#删除the所在行
3.替换符合条件的文本nl test.txt | sed 's/the/TTTTTT/'	#替换全文本nl test.txt | sed '4s/the/TTTTTT/'	#替换第4行nl test.txt | sed 's/l/L/2'		#替换匹配到的第2个l

以上修改想要直接修改文本源文件,只需要加入选项"-i"

五、awk

语法
    awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...
    awk -f 脚本文件 文件1 文件2 ...

语法awk 选项 '模式或条件{编辑命令}' 文件1 文件2 ...awk -f 脚本文件 文件1 文件2 ...
选项-F指定每行的分隔符默认分隔符为空格
内建变量FS:指定每行的分隔符NF:指定当前处理行的字段个数NR:当前处理行的行号$0:当前处理行的整行内容$n:当前处理的第n个字段FILENAME:处理文件名RS:数据记录分隔,默认是\n
案例:a)按行输出awk '{print}' test.txt 	 	#等同cat awk 'NR>=1&&NR<=3{print}' test.txt awk 'NR==1,NR==3{print}' test.txt #打印1到3行awk 'NR%2==0{print}' test.txt 	#打印偶数行b)按段输出默认以"空格"分段!ifconfig ens33 |awk '/netmask/{print $2}' #筛选IP地址cat /etc/shadow | awk -F : '$2=="!!"{print $1}' #打印不能登录系统的用户c)调用shell命令cat /etc/passwd | awk -F : '/bash$/{print | "wc -l"}' /etc/passwd 	#统计能够登录系统的用户个数	

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

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

相关文章

【前端】深入理解CSS盒子模型与浮动

目录 一、前言二、盒子模型1、盒子模型组成1.1、border边框1.1.1、边框的三部分组成1.1.2、边框复合简写1.1.3、边框分开写1.1.4、表格的细线边框 1.2、padding内边距1.3、margin外边距1.3.1、外边距水平居中1.3.2、外边距合并1.3.3、嵌套块元素垂直 外边距的塌陷1.3.3.1、解决…

设计模式之门面模式(Facade)的C++实现

1、门面模式提出 在组件的开发过程中&#xff0c;某些接口之间的依赖是比较紧密的&#xff0c;如果某个接口发生变化&#xff0c;其他的接口也会跟着发生变化&#xff0c;这样的代码违背了代码的设计原则。门面设计模式是在外部客户程序和系统程序之间添加了一层中间接口&…

Unity脚本常用生命周期

Unity脚本在Unity引擎运行时会经历多个阶段的变化。如创建&#xff0c;初始化&#xff0c;按帧执行&#xff0c;固定执行&#xff0c;绘制&#xff0c;禁用&#xff0c;销毁等等。具体如下图所示&#xff1a; 我们创建脚本时都是默认继承了MonoBehaviour类&#xff0c;而MonoBe…

【算法系列篇】二分查找——这还是你所知道的二分查找算法吗?

文章目录 前言什么是二分查找算法1.二分查找1.1 题目要求1.2 做题思路1.3 Java代码实现 2.在排序数组中查找元素的第一个和最后一个位置2.1 题目要求2.2 做题思路2.3 Java代码实现 3.搜索插入位置3.1 题目要求3.2 做题思路3.3 Java代码实现 4.x的平方根4.1 题目要求4.2 做题思路…

SpringMVC 反射型跨站点脚本攻击

解决方案&#xff1a; 服务端校验&#xff0c;添加拦截器 配置web,xml <filter><filter-name>xssFilter </filter-name><filter-class>com.fh.filter.XssFilter </filter-class></filter> XssFilter package com.fh.filter;import com…

TikTok Shop内容规则更新,禁止达人进行多平台联播

01.TikTok Shop禁止达人进行多平台联播 TikTok Shop更新了《TikTok Shop内容规则》&#xff0c;公告显示&#xff0c;TikTok Shop高度重视平台用户的安全&#xff0c;为保障用户体验并保护买家免受潜在的误导性广告的影响&#xff0c;在电商直播活动中&#xff0c;达人不得同时…

0基础入门C++之类和对象上篇

目录 1.面向过程和面向对象初步认识2.类的引入3.类的定义3.1类的两种定义方式:3.2成员变量命名规则的建议 4.类的访问限定符及封装4.1访问限定符4.2封装 5.类的作用域6.类的实例化7.类对象模型7.1如何计算类对象的大小7.2 类对象的存储方式猜测 8.this指针8.1this指针的引出8.2…

使用qsqlmysql操作mysql提示Driver not loaded

环境: win10 IDE: qt creator 编译器: mingw32 这里简单的记录下。我遇到的情况是在IDE使用debug和release程序都是运行正常&#xff0c;但是当我编译成发布版本之后。老是提示Driver not load。 这就很奇诡了。 回顾了下编译的时候是需要在使用qt先编译下libqsqlmysql.dll的…

16.遍历二叉树,线索二叉树

目录 一. 遍历二叉树 &#xff08;1&#xff09;三种遍历方式 &#xff08;2&#xff09;递归遍历算法 &#xff08;3&#xff09;非递归遍历算法 &#xff08;4&#xff09;层次遍历算法 二. 基于递归遍历算法的二叉树有关算法 &#xff08;1&#xff09;二叉树的建立 …

交叉编译liblzma:64位版本

xmlIO.c:40:10: 致命错误&#xff1a; lzma.h&#xff1a;没有那个文件或目录40 | #include <lzma.h>在交叉编译libxml时&#xff0c;报错 为解决这个问题&#xff0c;编译liblzma 网址https://tukaani.org/xz/ 解压&#xff1a; tar jxvf xz-5.2.12.tar.bz2执行&#…

Docker(一) 安装Docker

一、安装 安装前置条件 yum install -y yum-utils device-mapper-persistent-data lvm2 更换数据源 yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 1、指定版本安装 yum list docker-ce --showduplicates | sort -r yum …

数据之美:探索数据可视化设计的奇妙世界

在信息时代的浪潮中&#xff0c;海量的数据正在影响着我们的生活和决策。然而&#xff0c;数据本身虽然有力量&#xff0c;但如何将其有机地呈现给我们&#xff0c;却成为了一个挑战。数据可视化设计应运而生&#xff0c;它不仅让枯燥的数字变得生动&#xff0c;还带来了一场视…

录制游戏视频的软件有哪些?分享3款软件!

“有录制游戏视频的软件推荐吗&#xff1f;最近迷上了网游&#xff0c;想录制点自己高端操作的游戏画面&#xff0c;但是不知道用什么软件录屏比较好&#xff0c;就想问问大家&#xff0c;有没有好用的录制游戏视频软件。” 在游戏领域&#xff0c;玩家们喜欢通过录制游戏视频…

k8s service (二)

K8s service (二) Endpoint Endpoint是kubernetes中的一个资源对象&#xff0c;存储在etcd中&#xff0c;用来记录一个service对应的所有pod访问地址&#xff0c;它是根据service匹配文件中selector描述产生的。 一个Service由一组Pod组成&#xff0c;这些Pod通过Endpoints…

YOLOv5+deepsort实现目标追踪。(附有各种错误解决办法)

一、YOLOv5算法相关配置 🐸这里如果是自己只想跑一跑YOLOV5的话,可以参考本章节。只想跑通YOLOv5+deepsort的看官移步到下一章节。 1.1 yolov5下载 🐸yolov5源码在github下载地址上或者Gitee上面都有。需要注意的是由于yolov5的代码库作者一直在维护,所以下载的时候需…

Log4j反序列化命令执行漏洞(CVE-2017-5645)Apache Log4j2 lookup JNDI 注入漏洞(CVE-2021-44228)

一.Log4j反序列化命令执行漏洞(CVE-2017-5645&#xff09; Apache Log4j是一个用于Java的日志记录库&#xff0c;其支持启动远程日志服务器。Apache Log4j 2.8.2之前的2.x版本中存在安全漏洞。攻击者可利用该漏洞执行任意代码 环境&#xff1a;vulhub 工具下载地址&#xff1…

基于GRU门控循环网络的时间序列预测matlab仿真,对比LSTM网络

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 LSTM: GRU 2.算法运行软件版本 matlab2022a 3.部分核心程序 %构建GRU网络模型 layers [ ...sequenceInputLayer(N_feature)gruLayer(N_hidden)f…

服务器中了Cylance勒索病毒,数据该怎么恢复?

近日&#xff0c;在市面上出现了一种名为Cylance的勒索病毒。经过云天数据恢复中心技术工程师对比分析后发现&#xff0c;该病毒不属于已知的任何勒索病毒家族中的成员&#xff0c;属于一种新型的勒索病毒&#xff0c;那接下来我们分析一下这种勒索病毒。 中了Cylance勒索病毒的…

主程技术分享: 游戏项目帧同步,状态同步如何选

网络游戏开发项目中帧同步,状态同步如何选&#xff1f; 网络游戏的核心技术之一就是玩家的网络同步,主流的网络同步有”帧同步”与”状态同步”。今天我们来分析一下这两种同步模式。同时教大家如何在自己的项目中采用最合适的同步方式。接下来从以下3个方面来阐述: 对啦&…

如何通过人工智能和自动化提高供应链弹性?

全球供应链中的数字化转型已经引起了广泛关注&#xff0c;尽管在过去的十年中&#xff0c;这一话题被广泛讨论&#xff0c;但许多公司仍然对如何实现这一不明确的目标感到困惑。人们普遍认识到这种转变的重要性&#xff0c;而新冠疫情及其带来的巨大影响也为行业向数字化转型方…