Linux-Shell三剑客grep,awk,sed-08

news2024/9/23 13:20:42

awk、grep、sed是linux操作文本的三大利器,合称文本三剑客,也是必须掌握的linux命令之一。三者的功能都是处理文本,但侧重点各不相同,其中属awk功能最强大,但也最复杂grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

一、grep命令

在Linux 系统中 grep 命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。grep全称是 Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。

grep可用于shell脚本,因为grep通过返回一个状态值来说明搜索的状态,如果模板搜索成功,则返回0,如果搜索不成功,则返回1,如果搜索的文件不存在,则返回2。我们利用这些返回值就可进行一些自动化的文本处理工作。

1.1 基本语法

grep [option] pattern file

# 管道命令一起
命令 | grep xxxx

常用的参数

常用选项释义
-i忽略大小写进行匹配。
-v反向查找,只打印不匹配的行。
-n显示匹配行的行号。
-r递归查找子目录中的文件。
-l只打印匹配的文件名。
-c只打印匹配的行数。
-w只匹配整个单词,而不是部分匹配。
-o只显示匹配的部分,而不是整行。
-A n显示匹配行及后面n行的内容。
-B n显示匹配行及前面n行的内容。
-C n显示匹配行及前后各n行的内容。
-e pattern指定多个匹配模式。
-E使用扩展正则表达式进行匹配。
-F将模式视为固定字符串而不是正则表达式。

1.2 使用举例

准备文件test

忽略大小写查询

找到w的后两行 

 找到2的前两行

输出匹配到的行数

 实现多个匹配之间的或关系,查找包含w或者p的

二、sed命令

   sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换、删除、新增、选取等特定工作

2.1 基本语法

 sed [-nefri] ‘command’ 输入文本   

选项说明

​ -n∶使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN的资料一般都会被列出到萤幕上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。​ -e∶直接在指令列模式上进行 sed 的动作编辑;​ -f∶直接将 sed 的动作写在一个档案内, -f filename 则可以执行 filename 内的sed 动作;​ -r∶sed 的动作支援的是延伸型正规表示法的语法。(预设是基础正规表示法语法)​ -i∶直接修改读取的档案内容,而不是由屏幕输出。

动作说明

​ a ∶新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~​ c ∶取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!​ d ∶删除,因为是删除啊,所以 d 后面通常不接任何内容;​ i ∶插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);​ p ∶列印,亦即将某个选择的资料印出。通常 p 会与参数 sed -n 一起运作~​ s ∶取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g

2.2 使用举例

定义文件test,内容如下

HELLO LINUX!  
Linux is a free unix-type opterating system.  
This is a linux testfile!  
Linux test

2.2.1 增加内容

**增加一行**

# 在test文件的第一行后面追加上 aaaaaaaa
sed '1a aaaaaaaa' test 

 

注意:只是将文字处理了,没有写入到文件里,文件里还是之前的内容。

 

发现文件的内容并没有发生任何的变化  

**增加多行**

在一行到第三行的后面追加上bbbbbbbb

2.2.2 插入内容

在最后一行插入byebye

直接写入文件的化可以选择使用i的参数

3.2.3 删除内容

删除的字符是d,用法跟前面也很相似,对匹配到的数据行,进行删除。

     sed '1d' test              #删除第一行 
     sed '$d' test             #删除最后一行
     sed '1,2d' test           #删除第一行到第二行
     sed '2,$d' test         #删除第二行到最后一行
    sed '/Linux/d' test

删除最后一行

2.2.4 替换内容

整行替换

c 针对匹配到的整行内容替换为指定字符串

将含有linux的那一行替换为xuecheng

 语法:sed '/原来的字符/c 新字符' 文件的名字
 
 sed '/linux/c xuecheng' test

  将存在Linux的一行全部替换

只替换存在liunx的字段

2.2.5 日志截取

首先在我们的这个路径下随便找一个日志文件,我们根据时间段来截取部分日志信息

 sed -n '/时间段/,/时间段/p'  logfile

三、awk命令

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。之所以叫 AWK 是因为其取了三位创始人 Alfred Aho,Peter Weinberger, 和 Brian Kernighan 的 Family Name 的首字符linux中有三剑客之称:三剑客之首就是 AWK三剑客功能:

grep : 过滤文本

sed : 修改文本

awk : 处理文本

awk只要是用来格式化文本

3.1 基本语法

awk [参数] [处理内容] [操作对象] 

参数说明

参数说明
-F separator指定字段分隔符。
-f file从指定的文件中读取程序
-v var=value定义awk程序中的一个变量及其默认值
-mf N指定要处理的数据文件中的最大字段数
-mr N指定数据文件中的最大数据行数
-W keyword指定awk的兼容模式或警告等级

3.2 使用举例

3.2.1 从命令行读取程序脚本

awk 动作 文件名

准备一个文件test

**'{}'打印**

打印第二列的内容

 

打印第一列和第四列的内容

查找以This开头的行

查找以awk为结束的行 

匹配的就是严格以This开头的内容。

使用数据字段变量

awk会将如下变量分配给它在文本行中发现的数据字段(列):

  • $0代表整个文本行;

  • $1代表文本行中的第1个数据字段;

  • $2代表文本行中的第2个数据字段;

  • $n代表文本行中的第n个数据字段。

  • !: 逻辑非

  • ~ : 进行正则匹配(类似于关系表达式)

 查找不包含is关键字的内容  

 包含is的

3.2.2 变量 

wk中有不少内置的变量,比如$NF代表的是分割后的字段数量,相当于取最后一个。

NF: number filed 当前行分割后的字段个数。打印的时候,是取出最后一列

NR: number row 表示当前第几行、

列出最后一列

 输出当前行有几列,以及当前是第几行

其他的内置变量还有:

变量名说明
FILENAME:当前文件名
FS字段分隔符,默认是空格和制表符。
RS行分隔符,用于分割每一行,默认是换行符。
OFS输出字段的分隔符,用于打印时分隔字段,默认为空格。
ORS输出记录的分隔符,用于打印时分隔记录,默认为换行符。
OFMT数字输出的格式,默认为%.6g。

3.2.3 函数

 awk还提供了一些内置函数,方便对原始数据的处理。主要如下:

toupper():字符转为大写。
tolower():字符转为小写。
length():返回字符串长度。
substr():返回子字符串。
sin():正弦。
cos():余弦。
sqrt():平方根。
rand():随机数。

 将所有的,转为大写输出

3.2.3 条件

awk允许指定输出条件,只输出符合条件的行。输出条件要写在动作的前面:

awk '条件 动作' 文件名

还是刚才的例子,用逗号分隔之后有好几个空白行,我们加上限制条件,匹配后为空的不显示:

[root@localhost ~]# awk -F, '$2!="" {print $2}' test
apple
3.2.3.1 if 语句

awk提供了if结构,用于编写复杂的条件。比如:

[root@localhost ~]# awk '{if ($2 > "t") print $1}' test
2

将第一列内容大于2的行输出:

[root@localhost ~]# awk '{if($1>'2') print $0}' test
3 Are you like awk
This's a test
10 There are orange,apple,mongo

这一句的完整含义应该是:把每一行按照空格分割之后,如果第二个单词大于t,就输出第一个单词。这里对字符的大小判断应该是基于字符长度和 unicode 编码。

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

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

相关文章

UDP通信如何测试使用

用户数据报协议(User Datagram Protocol,UDP)是一种无连接的传输层通信协议,用于互联网应用程序。与TCP(传输控制协议)不同,UDP提供了较少的服务并且不保证数据的可靠传输,但它以更少的系统资源消耗和更低的延迟作为交换,这使得UDP非常适合那些对速度要求高而对数据丢…

【LLM之RAG】GraphRAG论文阅读笔记

研究背景 本文探讨了大型语言模型(LLM)如何通过从外部知识源检索相关信息来回答关于私有或之前未见过的文档集合的问题。特别指出,传统的检索增强生成(RAG)系统在处理全局问题时存在局限性,例如问整个文本…

四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较

目录 摘要(Abstract) 实验设置 实验结果 节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia …

java计算机毕设课设—CRM客户关系管理系统((附源码、文章、相关截图、部署视频)

这是什么系统? java计算机毕设课设—CRM客户关系管理系统((附源码、文章、相关截图、部署视频) CRM客户关系管理系统是一种基于Java开发的系统,旨在帮助企业更有效地管理与客户的互动。该系统通过优化客户信息的组织和分析,增强…

【Electron】npm安装Electron项目失败报错问题和解决办法

前言 闲来无事,便想着研究一下Electron,没想到安装直接就卡住了 问题 npm ERR! RequestError: Hostname/IP does not match certificates altnames: Host: npm.taobao.org. is not in the certs altnames: DNS:*.tbcdn.cn, DNS:*.taobao.com, DNS:*.al…

pygame小游戏

代码存在一些bug,感兴趣可自行修改,游戏运行后玩法与吃金币游戏类似。(代码及结果比较粗糙,仅供参考) 注:(图片、音乐、音效文件老是上传上传不上,想要可私,也可以自己找…

CentOS 7 安装详细教程

​ 大家好,我是程序员小羊! 前言: CentOS 7 是一个稳定的企业级 Linux 发行版,广泛用于服务器环境。CentOS 7 是基于 Red Hat Enterprise Linux (RHEL) 构建的企业级 Linux 发行版,提供免费的、开源的操作系统&#xf…

JVM-Java虚拟机-一文读懂-小白秒懂,老鸟进阶,必考面经

目录 JVM定义 Java Virtual Machine组成结构 各部分详解 0、类加载器 1、栈是运行的单位,堆是存储的单位 2、栈中存放各个栈帧 3、方法区——多线程共享区域 JVM定义 运行Java程序的平台内存结构、 垃圾回收、 类加载、 性能调优、 JVM 自身优化技术、 执行引…

【Web前端】vue3整合eslint约束代码格式

一、整合eslint 整合eslint的两种方式: 在已有项目中整合eslint:# 安装eslint及其vue插件即可 npm i -D eslint eslint-plugin-vue创建项目时整合eslint: 提示 是否引入ESLint用于代码质量检测 时选择 是# 创建vue3项目 npx create-vue # 下…

sqlserver同一数据库还原实例冲突可以用[文件和文件组]来备份解决

1.将数据库恢复模式改为完整 2.备份 在数据库右键--任务--备份 选择文件和文件组 选择位置备份 3.还原 在数据库上右键--还原文件和文件组 或者还原时修改实例名称(没试过)

2024年8月14日(haproxy)

一、haproxy简介 官网https://www.haproxy.com/ 自由及开放源代码软件 HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负我均衡,以及基TCP和HTTP的应用程序代理。 HAProxy特别适用于那些负载特大的veb站点,这些站点通常又需要会活保或七层处理。HAProxy运…

【Qt】QWidget的geometry属性

geometry,意思是“几何”。可以将geometry视为是四个属性的统称。 x:横坐标 y:纵坐标 width:宽度 height:高度 API说明 geometry() 获取到控件的位置和尺⼨. 返回结果是⼀个 QRect, 包含了 x, y, width, height. 其中…

jar包扫描不到,idea如何通过Project Structure设置

目录 一、进入Project Structure二、添加你的项目进来三、手动添加依赖 很多时候jar包文件已经存在,但是无法使用,需要通过Project Structure设置 一、进入Project Structure 选择Modules->点击 二、添加你的项目进来 一直next,最后点…

论文阅读笔记:ST-MetaNet-2

目录 预备知识 定义1:城市交通 定义2:Geo-graph属性 问题1 方法 RNN 元学习器 元图注意力网络 元循环神经网络 预备知识 在本节中,我们介绍定义和问题陈述。为简洁起见,我们在表1中提供了一个注释表。 假设有个位置&…

Java - API

API全称"Application Programming Interface",指应用程序编程接口 API(JDK17.0)链接如下 : Overview (Java SE 17 & JDK 17) (oracle.com)https://docs.oracle.com/en/java/javase/17/docs/api/中文版: Java17中…

C++内存泄露检测-Windows平台VLD

一、安装Visual Leak Detector 下载地址:https://kinddragon.github.io/vld/ 安装过程就一路next即可,如果自定义安装目录的话,需要记住安装的目录,默认目录 C:\Program Files (x86)\Visual Leak Detector,这个目录下…

[独家原创]基于(牛顿拉夫逊)NRBO-TCN多变量回归预测(多输入单输出) Matlab代码

[独家原创]基于(牛顿拉夫逊)NRBO-TCN多变量回归预测(多输入单输出) Matlab代码 NRBO优化的超参数为:卷积核个数、正则化系数、初始化学习率 1.程序已经调试好,无需更改代码替换数据集即可运行!!!数据格式为excel&…

色轮在数据可视化中的应用

在数据可视化中,色彩的运用不仅仅是为了美观,更是为了传达信息、区分数据和提升图表的易读性。本文探讨色轮及其色彩公式的应用,帮助大家更好地运用色彩来提升数据可视化的效果。 1、色轮的基础概念 色轮是一个用于表示颜色之间关系的图形工…

Linux自动构建工具——make/makefile

目录 一、make/makefile是什么? 二、深入了解 1.基本命令 提示:以下是本篇文章正文内容,下面案例可供参考 一、make/makefile是什么? 在Linux中make是一条指令,makefile是文件。make的核心功能就是读取一个或者多个…

解决问题:Arcgis10.8“数据“-“导出至CAD“时就卡死了

问题现象:我们在使用Arcgis10.8软件,执行 “数据导出至CAD”操作时,会出现卡死的情况,步骤如下图所示: 解决方案:在菜单栏依次选择“地理处理”-“地理处理选项”,然后在“后台处理”和“发生错…