Linux文本处理三大利器Grep、AWK、Sed

news/2024/4/19 3:08:22/文章来源:https://blog.csdn.net/m0_48468018/article/details/130353799

写在前面

Linux三剑客是文本处理工具,它们可以帮助我们快速、高效地对文本进行处理。其中包括了grep、awk、以及sed这三个强大的命令行工具。
Linux 三剑客主要作用:

  • grep,它可以根据正则表达式查找相关内容并打印对应的数据。
  • awk,它可以根据定位到的数据行处理其中的分段。
  • sed,它可以定位到数据行并对数据进行增删改查操作。
    这些工具在Linux系统中得到了广泛的应用,因此成为了Linux系统管理员和开发者必须要掌握的技能之一。

grep命令

grep命令是一种在文本中查找匹配字符串的工具。它允许用户根据正则表达式查找相关内容并打印对应的数据。以下是grep命令的格式:

grep [选项] “模式” [文件]

下面是grep命令的一些常用选项参数:

  • -c :计算找到 ‘搜寻字符串’ 的次数
  • -i :忽略大小写
  • -n :输出行号
  • -v :反向选择,亦即显示出没有 ‘搜寻字符串’ 内容的那一行。
  • –color=auto :可以将找到的关键词部分加上颜色显示。
  • -A n:显示匹配到的字符串所在的行及其后n行,after
  • -B n:显示匹配到的字符串所在的行及其前n行,before
  • -C n:显示匹配到的字符串所在的行及其前后各n行,context

以下为两个具体实例

# 查找文件中包含“hello”的所有行并显示行号
$ grep -n "hello" test.txt
1:hello world
3:hello linux# 查找文件中不包含“hello”的所有行
$ grep -v "hello" test.txt
welcome to linux

grep匹配模式常常为正则表达式,以下为常用正则:
在这里插入图片描述

AWK命令

AWK命令是一种强大的文本处理工具,通过它可以根据定位到的数据行处理其中的分段。AWK程序逐行扫描文件,并按照指定的规则处理每个输入行,输出格式也可以自由控制。以下是AWK命令的常用语法:

awk [-F field-separator] 'commands' input-file(s)

下面是一些AWK常用内置变量和实例:

  • $0: 表示整个文本行
  • $1: 表示第一个域(字段)
  • NF: 表示域的数量
  • NR: 表示行号
# 显示文件中的所有行号和行内容
$ awk '{print NR, $0}' test.txt# 显示按照分隔符分割的第二个域
$ awk -F "," '{print $2}' test.csv

AWK还有很多高级用法,如下为常用函数实例:

1.  toupper()和tolower()awk 'BEGIN{ print toupper("hello world") }'输出结果为:HELLO WORLD而:awk 'BEGIN{ print tolower("Hello World") }'输出结果为:hello world2. length()awk 'BEGIN{ print length("hello world") }'输出结果为:113. substr()awk 'BEGIN{ print substr("hello world", 2, 5) }'输出结果为:ello 

如下为awk BEGIN和END command执行条件示例

1. BEGIN模式,是指命令在处理文本之前执行,表示提取text.txt文件内容前打印test1 test2 test3
awk 'BEGIN{print "test1","test2","test3"}{print}' test.txt
2. END模式,是指命令在处理文本之后执行,表示提取文件内容后打印end1 end2 end3
awk '{print} END{print "end1","end2","end3"}' test.txt
3. BEGIN模式和END模式同时存在时,其中,BEGIN与END之间的{}相当于一个循环体,对文件中的每一行进行处理
awk 'BEGIN{print "test1","test2","test3"}{print} END{print "end1","end2","end3"}' test.txt

sed命令

sed是一种流编辑器,它可以定位到数据行并对数据进行增删改查操作。sed命令的格式如下:

sed [options] 'command' file(s)

以下是sed命令的一些常用选项:

  • -n: 不输出模式空间内容而是手动输出指定的行
  • -e: 允许多个命令
  • -i: 修改文件内容
  • -r: 使用扩展正则表达式

以下是sed命令的一些常用操作:

  • a :新增
  • c :取代
  • d :删除
  • i :插入
  • p :打印
  • s :取代

通过如下实例理解sed命令:

1. sed 'a This is a new line' file.txt:在文件file.txt的末尾新增一行文字“This is a new line”。2. sed 'c old line new line' file.txt:将文件file.txt中的“old line”替换成“new line”。3. sed 'd' file.txt:删除文件file.txt中的每一行内容,等效于清空文件。4. sed 'i This is a new line' file.txt:在文件file.txt的首行插入一行文字“This is a new line”。5. sed 'p' file.txt:打印文件file.txt的每一行内容,即重复一遍该文件内容。6. sed 's/old/new/g' file.txt:将文件file.txt中所有的“old”替换成“new”。其中,“/g”表示全局替换,即一行中出现多个“old”时全部替换。7. sed -i '/test/d' test.txt 删除文件中包含"test"的行并保存修改

命令实战

  1. 使用grep提取本机IP命令
ip a|grep inet|grep -Po '(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}'

具体解释如下:

  • ip a:列出网络接口的属性,包括IP地址。

  • grep inet:筛选包含“inet”的行,这些行包含有IP地址相关信息。

  • grep -Po:使用Perl正则表达式来匹配IP地址,保留匹配到的IP地址。

  • ‘(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9])(.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}’:正则表达式,用来匹配IP地址。

其中:

- (1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|[1-9]):匹配0-199中的数字,或者200-249中的数字,或者250-255中的数字,或者10-99中的数字,或者1-9中的数字。- (\.(1\d{2}|2[0-4]\d|25[0-5]|[1-9]\d|\d)){3}:匹配由三个点隔开的三个数字段,每个数字段匹配的规则同上述第一条。
  1. 使用sed提取本机IP命令
ip a|grep inet|sed 's/inet /''/g'|sed 's/\/.*$/''/'

具体解释如下:

  • 's/inet /''/g' 将inet 替换为空字符
  • 最后一部分 \/ 表示/字符,.*$表示匹配任意多个,意思是将/和后面的字符串全部替换为空字符
  1. 使用awk提取本机IP命令
ip a|grep inet|awk -F 'inet ' '{print $2}'|awk -F '/' '{print $1}'

如上命令表示先提取第二列的内容,获取类似下图:
在这里插入图片描述
然后通过/分割,取第一列的内容。

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

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

相关文章

C. Painting the Fence(思维 + 前缀和)

Problem - C - Codeforces You需要油漆一个由n个部分组成的长围栏。不幸的是,它没有被涂漆,所以你决定雇用q名画家来完成这项工作。第i名画家将会油漆所有满足lisxsri的部分x. 不幸的是,你的预算很紧,所以你只能雇用q-2名画家。显…

数据湖Iceberg-简介(1)

文章目录 Iceberg简介概述特性数据存储、计算引擎插件化实时流批一体数据表演化(Table Evolution)模式演化(Schema Evolution)分区演化(Partition Evolution)列顺序演化(Sort Order Evolution&a…

itop-3568开发板驱动学习笔记(22)设备树(一)设备树基础

《【北京迅为】itop-3568开发板驱动开发指南.pdf》 学习笔记 文章目录 设备树简介设备树编译设备树语法设备根节点设备子节点节点名称reg 属性#address-cell 和 #size-cells 属性model 属性status 属性compatible 属性aliases 节点chosen 节点device_type 属性自定义属性 设备树…

Linux云服务器的使用,以及运行Python程序

目录 1、使用Linux云服务器的软件 2、Linux系统运行Python程序 3、Linux系统查看包、虚拟环境、安装包等 以下几个深度学习服务器都不错:智星云、AutoDL、恒源云 1、使用Linux云服务器的软件 MobaXterm_Personal 推荐MobaXterm_Personal mobaxterm是一款方便网站…

数据库管理新定义:一款纯Web化免费SQL开发工具,免安装

SQL Studio是一款由麦聪软件研发的多数据库管理工具,提供Windows、Linux 和 MacOS三种版本的软件包,支持中英文两种语言。SQL Studio是用Java编写的,默认使用 JDK 8进行编译。 下载看这里: [SQLStudio] (http://www.maicongs.com/#/home/web)…

地热井监测控制系统解决方案

概述 地热井监测控制系统主要是对地热井采水和回灌进行流量、温度、水位(压力)等参数的实时监测,对地热站现场环境进行实时视频监控。地热井现场和取水井、回灌井安装监测装置,通过无线传输设备将数据实时传输至自然资源局已建中…

上海车展:预售价109.8万元,仰望U8见证国产品牌崛起

如果要评选2023上海车展上比亚迪展台“最亮的星”,估计很多媒体和观众都会毫不迟疑地把票投给仰望U8。 没办法,因为在本届车展上,仰望U8的表现实在是太吸睛了。 作为比亚迪旗下的高端新能源品牌,仰望汽车在上海车展上携两款车型—…

【Leetcode -141.环形链表 -2.两数相加】

Leetcode Leetcode -141.环形链表Leetcode -2.两数相加 Leetcode -141.环形链表 题目:给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给…

测试Ocr工具IronOCR(续2:编写圈选图片识别文本的程序)

上篇文章介绍了加载图片并圈选图片中文字区域的程序实现方式,本文基于此实现识别圈选区域文字内容的程序。主要识别语言包括英文和中文。IronOCR包中自带英文语言包,项目还需安装中文语言包,建议直接安装IronOcr.Languages.Chinese语言包&…

什么样的测试才是优秀的测试

什么样的测试才是优秀的测试 优秀的测试应该包括以下要素: 测试代码的可读性和可维护性 代码在项目中及特定源代码中的组织方式 测试所检查的内容 测试的可靠性及可重复性 测试对测试替身的使用 可读的代码才是可维护的代码 代码较差的可读性与缺陷密度密切相…

软件测试技术那么多,我们该如何分辨?

经典软件测试技术分类: 测试技术是指顺利完成测试的一系列相关过程,有很多可能的分类方式,表2-1就是其中的一种。表中列出了流行的测试技术,也按照上面的讨论对其进行分类:手工测试、自动测试、静态测试、动态测试、功…

今年SMETA审核费用即将涨价

【今年SMETA审核费用即将涨价】 SMETA全称( Sedex Members Ethical Trade Audit ),即Sedex会员社会道德贸易审核,它是Sedex发起的一种负责任的供应链审计方法/项目。 Sedex是一个全球性的责任商业平台,SMETA是审核方法…

手推FlinkML2.2(三)

SQLTransformer(SQL转换器)是一种数据预处理方法,允许您使用SQL语句对数据进行转换和操作。SQL转换器通常用于数据清洗、特征工程和数据聚合等任务,以提高数据分析和机器学习模型的性能。它可以与各种数据处理和存储系统&#xff…

本地搭建属于自己的ChatGPT:基于PyTorch+ChatGLM-6b+Streamlit+QDrant+DuckDuckGo

本地部署chatglm及缓解时效性问题的思路: 模型使用chatglm-6b 4bit,推理使用hugging face,前端应用使用streamlit或者gradio。 微调对显存要求较高,还没试验。可以结合LoRA进行微调。 缓解时效性问题:通过本地数据库…

你的车有通风座椅吗?新款奔驰S400升级原厂主副驾座椅通风

大家好,我是奔之升小志(bzs878),专注名车原厂升级,欢迎戳戳右上角“”号关注一下,持续为您带来精彩改装案例。 座椅通风有什么用?能改善身体与座椅接触面空气流通,达到不出汗的效果…

选择美国虚拟主机需注意的安全问题

在选择美国虚拟主机时,安全性应该是您首要关注的问题。虚拟主机通常是网站托管的最便宜和最方便的方式之一,但也存在安全问题。在本文中,我们将讨论一些您应该注意的安全问题,并提供一些解决方案来保护您的网站。 一、了解虚拟主机…

C++(继承(上))

目录 : 1.引出继承的概念 2.继承的关系和方式 3.继承中的作用域 ------------------------------------------------------------------------------------------------------------------------------ 1.引出继承的概念 这些学生、老师、后勤都具有相同的特征&…

elementUI-el-table组件使用总结

一、背景 vue2项目中用到el-table这个组件&#xff0c;但基础的功能不够用&#xff0c;所以需要自定义 二、表头自定义 比如要让表头展现出下面的形式&#xff1a; 只需使用 slot"header" slot-scope"scope" 对插槽进行定义&#xff0c;并绑定变量 <…

CPU Cache:访问存储速度是如何大幅提升的?

我们了解到不同的物理器件&#xff0c;它们的访问速度是不一样的&#xff1a;速度快的往往代价高、容量小&#xff1b;代价低且容量大的&#xff0c;速度通常比较慢。为了充分发挥各种器件的优点&#xff0c;计算机存储数据的物理器件不会只选择一种&#xff0c;而是以 CPU 为核…

java的validation框架(参数校验)

一.bean validation和hibernate validator参数校验常用约束注解&#xff1a; 空值校验类&#xff1a;Null&#xff0c;NotNull&#xff0c;NotEmpty&#xff0c;NotBlank等 范围校验类&#xff1a;Min&#xff0c;Size&#xff0c;Digits&#xff0c;Future&#xff0c;Negati…