文本处理三剑客grep,awk,sed-读书笔记(十四)

news2024/11/27 16:25:07

文本处理三剑客{

1.内容过滤器 => grep

2.文本分析器 => awk

3.行文本处理器 => sed

}

grep内容过滤器

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

grep命令的基本语法如下:

grep [选项] PATTERN [文件名]

其中,PATTERN表示要搜索的模式,可以是字符串、正则表达式或者单个字符;文件名是要搜索的文件,如果不指定文件名,则从标准输入读取数据。

grep命令的主要选项有:

  • -i:忽略大小写
  • -v:显示不包含匹配文本的所有行(反向匹配)
  • -n:显示匹配行的行号
  • -c:显示匹配行的数量
  • -l:显示包含匹配行的文件名
  • -r:递归搜索子目录中的文件
  • -E:将模式视为扩展正则表达式
  • -F:将模式视为固定字符串,而非正则表达式
  • -w:匹配整个单词,而非字符串的一部分
  • -A num:显示匹配行及其后num行
  • -B num:显示匹配行及其前num行
  • -C num:显示匹配行及其前后各num行

例子1:在文件file.txt中查找包含"hello"的行

grep "hello" file.txt

例子2:在文件file.txt中查找包含"hello"或"world"的行,忽略大小写

grep -i "hello\|world" file.txt

awk文本分析器

awk是一种在Linux系统中处理文本文件的语言,被誉为文本分析工具中的“三剑客之首”,其它两把剑分别是grep和sed。它逐行读取文本,并以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并根据模式或者条件执行编辑命令。

awk的基本语法格式是 awk 'pattern {action}' filename,其中pattern表示AWK在数据中查找的内容,而action是找到匹配内容时所要执行的一系列命令。

例如,我们有一个名为students.txt的文件,内容如下:

Tom 85 90 92 Jerry 88 92 96 Alice 78 80 85

如果我们想要计算每个学生的平均分,可以使用以下命令:

awk '{sum=($1+$2+$3)/3; print $0, sum}' students.txt

这条命令首先通过{sum=($1+$2+$3)/3;}计算每个学生的总分数,然后通过print $0, sum打印每行和总分。

另一个例子,如果我们想要查看一个文件的行数,可以使用以下命令:

awk 'END { print NR }' example.txt

这个命令通过内置变量NR(记录数)来调用相关信息,打印出文件的行数。

这条Linux命令使用了两个常用的文本处理工具:cat 和 awk。下面是命令的详细解释:

  1. cat test.txt

:cat 是 "concatenate" 的缩写,通常用于显示文件内容。这里它将 test.txt 文件的内容输出到标准输出(通常是你的终端屏幕)。

  1. |

:这个符号是管道操作符,它允许你将前一个命令的输出作为下一个命令的输入。

  1. awk '/^name/{name=$0; next;}{print name "-" $0}'

:awk 是一个强大的文本处理工具,能够执行复杂的文本操作。这个 awk 命令做了以下几件事:

综上所述,这条命令的作用是:从 test.txt 文件中找到以 "name" 开头的行,将其内容存储在一个变量中,并为该文件中的每一行打印出这个变量的内容,后面跟着一个短横线和当前行的内容。如果文件中有多个以 "name" 开头的行,只有第一次出现的 "name" 行的内容会被使用。

例如,如果 test.txt 文件的内容是:

name John Doe age 30 location New York

运行这条命令后,输出将是:

name John Doe - age 30 name John Doe - location New York

这样,无论文件中有多少行,以 "name" 开头的那一行的内容都会被重复打印,直到遇到文件的末尾。

sed行文本处理器

sed 是一个流编辑器,用于对文本数据进行处理。它一次读取一行输入,然后根据指定的指令对这行数据进行处理,并将结果输出。sed 命令非常适合用于自动化文本处理任务,如查找、替换、删除文本行等。

基本语法:

sed [选项]... [指令]...

主要参数:

  • -n 或 --quiet 或 --silent:仅打印 sed 指令处理后的行,不打印模式空间的内容。
  • -e:添加一个指令到命令的列表中。
  • -f:从文件中读取 sed 指令。
  • -i:直接修改文件,而不是输出到标准输出。

常用指令:

  • s:替换指令,格式为 s/regexp/replacement/flags。
    • regexp:正则表达式,用于匹配要替换的文本。
    • replacement:用于替换匹配到的文本的字符串。
    • flags:可选标志,如 g 表示全局替换。

示例:

  1. 替换文本中的字符串

假设我们有一个文本文件 example.txt,内容如下:

hello world hello universe hello galaxy

使用 sed 将所有的 "hello" 替换为 "hi":

sed 's/hello/hi/' example.txt

输出:

hi world hi universe hi galaxy

如果要直接修改文件,可以使用 -i 选项:

sed -i 's/hello/hi/' example.txt

  1. 删除匹配的行:

继续以 example.txt 为例,如果要删除所有包含 "universe" 的行:

sed '/universe/d' example.txt

输出:

hi world hi galaxy

同样,使用 -i 选项可以直接修改文件:

sed -i '/universe/d' example.txt

请注意,sed 的功能非常强大,这里只是介绍了一些基本的用法。根据具体的需求,sed 可以执行更复杂的文本处理任务。

g代表将所有的warning替换为Warning,如果不加g的话就是将每一行的第一个warning替换为Warning

如果不加 -i 参数 就不会对源文件进行修改文本只是进行终端的输出

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

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

相关文章

Multisim14 安装教程

1、下载压缩包 链接:https://pan.baidu.com/s/1L50kBBKWFtud6GhmmqHLiw?pwd8888 提取码:8888 2、解压 3、运行应用程序,开始安装, 4、点击确定 5、点击unzip,解压 6、点击确定 7、点击安装 8、填写name和organ&a…

深入探索不相交集合:链表表示与加权合并策略的实现

深入探索不相交集合:链表表示与加权合并策略的实现 1. MAKE-SET 操作伪代码C语言实现 2. FIND-SET 操作伪代码C语言实现 3. UNION 操作伪代码C语言实现 4. 集合对象和表对象的属性5. 总结 在本文中,我们将探讨如何使用链表表示和加权合并启发式策略来实现…

研究生通用学术英语写作(刘美岩)教材电子版分享

研究生通用学术英语写作电子版资源分享 本着开源的思想,为了实现互通有无,诸位需要研究生通用学术英语写作电子版资源的朋友可以直接微信关注下面公众号,或者手动搜索莲花百货铺,在公众号中直接输入书名就可获得网盘链接&#xff…

运维必备 | 《K8s故障排查手册》,强烈建议收藏!!

新手在使用K8s时经常出现各种故障,有些故障不知道背后原因,迟迟不能解决。今天就分享一份大佬总结的K8s常见问题故障排查手册,超级实用,运维及K8s使用者一定要收藏备用! 简介 这份《K8s故障排查手册》,共…

电子作业指导书系统如何提升医疗设备工厂的生产效率

在医疗设备工厂中,电子作业指导书(ESOP)正逐渐成为提升生产效率的关键因素。 一、电子作业指导书系统提供了即时可得的准确信息。 电子作业指导书系统与传统的纸质作业指导书相比,员工可以在工作现场通过电子设备随时查阅最新、最…

kubeflow文档-介绍与架构

1. kubeflow介绍 Kubeflow项目致力于使机器学习(ML)工作流在Kubernetes上的部署变得简单、可移植和可扩展。目标不是重新创建其他服务,而是提供一种直接的方法,将ML的开源系统部署到不同的基础设施中。无论在哪里运行Kubernetes&a…

【C++初阶】string模拟实现

✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿&#x1…

Python 求高斯误差函数 erf 和 erfc

文章目录 Part.I IntroductionPart.II 概念定义Chap.I 误差函数 erfChap.II 误差函数补 erfc Part.II 求值与绘图Chap.I 求取方式Chap.II 绘图 Reference Part.I Introduction 本文将对误差函数(ERror Function, ERF)进行简单的介绍,并探索如…

R语言:GSEA分析

#安装软件包 > if (!requireNamespace("BiocManager", quietly TRUE)) install.packages("BiocManager") > BiocManager::install("limma") > BiocManager::install("org.Hs.eg.db") > BiocManager::install("…

吴恩达机器学习笔记:第 10 周-17大规模机器学习(Large Scale Machine Learning)17.1-17.2

目录 第 10 周 17、 大规模机器学习(Large Scale Machine Learning)17.1 大型数据集的学习17.2 随机梯度下降法 第 10 周 17、 大规模机器学习(Large Scale Machine Learning) 17.1 大型数据集的学习 如果我们有一个低方差的模型,增加数据集的规模可以帮助你获得更…

8种常见的CMD命令

1.怎么打开CMD窗口 步骤1:winr 步骤2:在弹出的窗口输入cmd,然后点击确认,就会出现一个cmd的窗口 2.CMD的8种常见命令 2.1盘符名称冒号 说明:切换盘的路径 打开CMD窗口这里默认的是C盘的Users的27823路径底下&#xf…

生产制造行业推拉式生产的复合应用

一、案例分析(汽配行业) 重点: 1. MTO/MTS 与 PUSH/PULL 有关系但是不是充分关系 2. MTO/MTS 是公司经营策略,更多是对市场需求的经营策略,体现在生产时机上的不同,一个是等客户需求,一个是填…

程序员健康指南:运动,让代码更流畅

程序员健康指南:运动,让代码更流畅 程序员,一个与电脑相伴的群体,长时间的久坐和高强度的脑力劳动是他们的日常。然而,久坐不仅影响体态,更对心脏健康构成威胁。根据《欧洲心脏杂志》的研究,中…

Caddy2使用阿里云DNS申请https证书,利用阿里云DNS境内外不同解析给Gone文档做一个同域名的国内镜像站点

我从头到尾实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能;自己觉得还挺好用的,并且打算长期维护! github地址:https://github.com/gone-io/gone 文档原地址:https:/…

MTATLAB--一元线性回归分析

一文让你彻底搞懂最小二乘法(超详细推导) 在进行一元线性回归分析时,使用最小二乘法进行解题,关于最小二乘法具体看上述文章。 数据文件在文章顶部可见,将第一列数据作为自变量x,第二列数据作为应变量y。建…

使用java远程提交flink任务到yarn集群

使用java远程提交flink任务到yarn集群 背景 由于业务需要,使用命令行的方式提交flink任务比较麻烦,要么将后端任务部署到大数据集群,要么弄一个提交机,感觉都不是很离线。经过一些调研,发现可以实现远程的任务发布。…

【RabbitMQ】消息队列 - RabbitMQ的使用记录

目录 一、什么是消息队列 二、什么是RabbitMQ 三、安装RabbitMQ 3.1 安装Erlang环境 3.2 安装RabbitMQ 3.3 打开服务管理界面 3.4 常用命令 四、Python示例代码 4.1 发送数据 4.2 接收数据 一、什么是消息队列 消息队列(Message Queue)是一种用于在应用程序之间传递消…

vue:网页icon无法显示

logo文件放在public文件夹下,在html里设置icon。 本地源码运行后发现网页icon无法显示我们设置的logo,而是显示了浏览器默认icon。 这个问题不需要解决,部署后网页icon显示就正常了。

绝地求生PUBG新老艾伦格有什么差别 老艾伦格什么时候回归

复古风格的艾伦格原始地图携带着那些标志性的记忆符号华丽回归,邀请您沉浸于往昔的每一处细节探索中。我们不仅还原了游戏诞生的起点,还在其中巧妙融入现代游戏元素,构筑一座连接昔日与今朝的桥梁,完美融合了经典与创新的游戏体验…

【动态规划四】子序列问题

目录 leetcode题目 一、最长递增子序列 二、摆动序列 三、最长递增子序列的个数 四、最长数对链 五、最长定差子序列 六、最长的斐波那契子序列的长度 七、最长等差数列 八、等差数列划分 II leetcode题目 一、最长递增子序列 300. 最长递增子序列 - 力扣&#xff0…