当前位置: 首页 > news >正文

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令,脚本或者文本处理任务中会用到。这里做个整理。
三者的功能都是处理文本,但侧重点各不相同,grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

1、grep

grep的全称是Global Regular Expression Print,全局正则表达式打印。用于文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来(就是只要一行里有对应的字符被匹配到,这一行都会被打印出来)。

grep加上正则匹配会有很多功能,但我目前只常用一些简单的:

  • xxx | grep AA 在命令的输出后提取AA关键词并显示。可以过滤其他不关心的输出
  • grep -r “xxx” . 在当前目录及其中所有文件中查找包含xxx的文件和语句。我在找不到某句话出自哪个文件时会用

2、sed

linux下输入sed会显示他的用法:

-n:静默模式,仅打印由 p 命令指定的行。
-e script:直接在命令行模式中添加 sed 脚本。
-f script-file:从文件中读取 sed 脚本。
-i:直接编辑文件。

注意只有-i才会直接修改文件,其余的都是打印到终端,或者可以输出到另一个文本中。

常见命令

  • 匹配行,打印 ( p ):打印指定行或匹配的行。
    注意想只输出其中的几行只用’20,40p’不行,必须加上-n,否则会打印所有行
  • 增加(a)/插入(i),删除 (d),替换(s)

替换匹配行的关键字s/regexp/replacement/flags):

s 代表替换命令
regexp 是一个正则表达式,用于匹配要替换的文本。
replacement 是用来替换匹配文本的新文本。
flags 是可选的标志,用于修改替换行为。  g表示全局替换,不加的话只替换匹配到的第一行
sed -n '20,40p' input.txt  只打印txt中的20到40行
sed '5,10d' input.txt    删除5-10行
sed -n '/aaaa/'p test.txt 显示包含关键字的所有行
sed 's/foo/bar/g' input.txt  将所有 foo 替换为 bar
sed -i '4s/a/A/g' test.txt -i 直接修改文件内容 ,替换修改会保存到源文件中。
4s指的是进行第四行替换, g代指的全局替换 将a替换成A。并保存文件。

3、awk

sed对行进行操作,awk适合对列进行操作。awk就是把文件逐行的读入,以空格为默认分隔符分隔符也可以自己选定,可以用多个分隔符,用 -F指定)将每行切片,切开的部分再进行各种分析处理。
在这里插入图片描述

设置pattern:
awk '/^This/' test  打印开头是This的行设置options:  {}中写要做什么操作
awk '{print $1,$4}' test  最常用的命令,打印以空格分隔的第一列和第三列。$0是打印整行
awk -F',' '{print $1, $2}' file  以逗号为分隔
awk -F '[ ,]'  '{print $1,$2,$5}' test  []中的是正则表达式,表示以空格和逗号做分隔
awk '{sum += $1} END {print sum}' file 求列的总和

(1)内建变量

其中awk还有很多内建变量:

变量描述
$n当前记录的第n个字段,字段间由FS分隔
$0完整的输入记录
ARGC命令行参数的数目
ARGIND命令行中当前文件的位置(从0开始算)
ARGV包含命令行参数的数组
CONVFMT数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO最后一个系统错误的描述
FIELDWIDTHS字段宽度列表(用空格键分隔)
FILENAME当前文件名
FNR各文件分别计数的行号
FS字段分隔符(默认是任何空格)
IGNORECASE如果为真,则进行忽略大小写的匹配
NF一条记录的字段的数目
NR已经读出的记录数,就是行号,从1开始
OFMT数字的输出格式(默认值是%.6g)
OFS输出字段分隔符,默认值与输入字段分隔符一致。
ORS输出记录分隔符(默认值是一个换行符)
RLENGTH由match函数所匹配的字符串的长度
RS记录分隔符(默认是一个换行符)
RSTART由match函数所匹配的字符串的第一个位置
SUBSEP数组下标分隔符(默认值是/034)
awk '{print $NF}' test   取每行的最后一个匹配到的字符($NF代表的是分割后的字段数量)

awk也可以配合管道符一起,平头哥笔试中有考过awk的使用,提取最后一列
在这里插入图片描述

(2)内建函数

可以参考AWK 内置函数|菜鸟教程

这里只说一个split( String, array, fieldsep)
参数分别是:要拆分的字符串;拆分后保存结果的数组;用于拆分的分隔符,可以是正则表达式

sed -n '10,1000p' timing.rpt | awk '{split($1,a,"/");print a[1],$5}' > output.csv

时序分析总结报告的每一行都是 AA/BB/CC 1.2 4.6 0.0 -0.13 xxxx之类的形式,我希望提取AA来确定是哪个大模块,-0.13表示对应的slack,就可以用上面的表达式

$1是以空格分隔的第一列字符串,要将他继续用/进行拆分,并且把结果存到数组a中;之后打印数组a的第一个元素和原本空格为分解的第5列.
这样就可以实现先用一个元素分界,之后再细分其中的结果。 其实直接用awk -F ‘[ /]'也可以分开,但是这个例子就适用于先用空格分,之后再对分出来的列做处理,因为一开始就用/分的话,因为路径长度不一致,后面slack的个数就不确定了,不过应该也可以倒着往回数

结果为:
AA1 -0.13
AA2 -0.12

4、正则表达式

正则表达式(Regular Expressions,简称 regex 或 regexp)引擎是一个用于匹配字符串的模式匹配工具。它是一种强大的工具,用于在文本中搜索、匹配和操作复杂的字符串模式。

1、正则表达式引擎
正则表达式引擎是一个程序或库,能够解析和执行正则表达式语法。它接受一个正则表达式和一个输入字符串,然后根据正则表达式的模式在字符串中查找匹配项。正则表达式引擎通常内置于编程语言或文本编辑器中,如 Perl、Python、JavaScript、Java、.NET、Vim、grep 等。

2、正则表达式的基本组成部分
正则表达式由元字符和普通字符组成。元字符具有特殊意义,可以表示位置、数量、分组等操作。以下是一些常见的元字符及其含义:

(1)格式
. 匹配任意单个字符,不能匹配空行
[] 匹配指定范围内的任意单个字符
[^] 取反
[:alnum:] 或 [0-9a-zA-Z]
[:alpha:] 或 [a-zA-Z]
[:upper:] 或 [A-Z]
[:lower:] 或 [a-z]
[:blank:] 空白字符(空格和制表符)
[:space:] 水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] 不可打印的控制字符(退格、删除、警铃…)
[:digit:] 十进制数字 或[0-9]
[:xdigit:]十六进制数字
[:graph:] 可打印的非空白字符
[:print:] 可打印字符
[:punct:] 标点符号

(1)字符类:
[abc]:匹配 a、b 或 c 中的任意一个字符。
[^abc]:匹配除 a、b 或 c 之外的任意一个字符。
[a-z]:匹配从 a 到 z 的任意一个小写字母。

预定义字符类:
.:匹配除换行符外的任意字符。
\d:匹配任何数字,相当于 [0-9]。
\w:匹配任何字母、数字或下划线,相当于 [a-zA-Z0-9_]。
\s:匹配任何空白字符,包括空格、制表符等。

(2)量词:
*:匹配前面的元素零次或多次
+:匹配前面的元素一次或多次
?:匹配前面的元素零次或一次
{n}:匹配前面的元素恰好 n 次。
{n,}:匹配前面的元素至少 n 次。
{n,m}:匹配前面的元素至少 n 次,至多 m 次。

(3)锚点:
^:匹配字符串的开始。
$:匹配字符串的结束。

(4)分组和捕获:
(…):将模式分组并捕获匹配的文本。
(?:…):将模式分组但不捕获匹配的文本。

(5)转义字符:
\:用于转义元字符,使其失去特殊意义。

参考:
Linux 文本处理三剑客:grep、sed 和 awk(有例子,易懂)
Linux文本三剑客超详细教程—grep、sed、awk(写的很详细)

相关文章:

Linux文本处理三剑客+正则表达式

Linux文本处理常用的3个命令,脚本或者文本处理任务中会用到。这里做个整理。 三者的功能都是处理文本,但侧重点各不相同,grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对…...

Linux启动KKfileview文件在线浏览时报错:启动office组件失败,请检查office组件是否可用

目录 1、导论 2、报错信息 3、问题分析 4、解决方法 4.1、下载 4.2、安装步骤 1、导论 今天进行项目部署时,遇到了一个问题。在启动kkfileview时,出现了报错异常: 2024-06-09 06:36:44.765 ERROR 1 --- [ main] cn.keking.service.Of…...

React <> </>的用法

React &#xff1c;&#xff1e; &#xff1c;/&#xff1e;的用法 介绍为什么使用 <>&#xff1f;例子解释 关于顶级元素总结 介绍 在 React 中&#xff0c;使用 <> 表示一个空标签或片段&#xff08;Fragment&#xff09;&#xff0c;这是一个简洁的方式来包裹一…...

is not null 、StringUtils.isNotEmpty和StringUtils.isNotBlank之间的区别?

这三者主要是针对对象是否为空、是否为空串和是否为空白字符串有不同的功能。 is not null 只是说明该对象不为空&#xff0c;没有考虑是否为空串和空白字符串。 StringUtils.isNotEmpty检查字符串是否不为 null且长度大于零&#xff0c;不考虑字符串中的空白字符。 StringU…...

Git使用-gitlab上面的项目如何整到本地的idea中

场景 一般我们在开发项目或者接手某个项目时&#xff0c;基本都要接触Git&#xff0c;比如上传项目代码&#xff0c;下载同事给你的交接代码等等。 这是一个基本功&#xff0c;小小整理一下日常操作中的使用。 第一步&#xff1a;在 GitLab 上找到你要克隆的项目&#xff0c;复…...

活体检验API在Java、Python、PHP中的使用教程

活体检验API是一种基于生物特征的身份验证技术&#xff0c;通过分析和识别用户的生物信息来确认其身份。这种技术广泛应用于各种领域&#xff0c;如金融、安全、社交媒体等&#xff0c;以提高身份验证的安全性和准确性。以下是描述”活体检验API”背景的一些关键点&#xff1a;…...

智能计算系统-概述

1、人工智能技术分层 2、人工智能方向人才培养 3、课程体系的建议 4、智能系统课程对学生的价值 5、智能计算系统对老师的价值 6、什么是智能计算系统 7、智能计算系统的形态 8、智能计算系统具有重大价值 9、智能计算系统的三大困难 10、开创深度学习处理器方向 11、寒武纪的国…...

SM5101 SOP-8 充电+触摸+发执丝控制多合一IC触摸打火机专用IC

SM5101 SOP-8 2.7V 涓流充电 具电池过充过放 触摸控制 发热丝电流控制多功能为一体专用芯片 昱灿-海川 SM5101 SOP-8 充电触摸发执丝控制多合一IC触摸打火机方案 &#xff01;&#xff01;&#xff01; 简介&#xff1a; SM5101是一款针对电子点烟器的专用芯片&#xff0c;具…...

Mysql-题目02

下面列出的&#xff08; DBMS &#xff09;是数据库管理系统的简称。 A、DB&#xff08;数据库&#xff09; B、DBA C、DBMS(数据库管理系统&#xff09; D、DBS&#xff08;数据库系统) 以下选项中&#xff0c;&#xff08; 概念模式 &#xff09;面向数据库设计人员&…...

Swift开发——循环执行方式

本文将介绍 Swift 语言的循环执行方式 01、循环执行方式 在Swift语言中,主要有两种循环执行控制方式: for-in结构和while结构。while结构又细分为当型while结构和直到型while结构,后者称为repeat-while结构。下面首先介绍for-in结构。 循环控制方式for-in结构可用于区间中的…...

Navicat和SQLynx产品功能比较一(整体比较)

Navicat和SQLynx都是数据库管理工具&#xff0c;在过去的二十年中&#xff0c;国内用户主要是使用Navicat偏多&#xff0c;一般是个人简单开发需要&#xff0c;数据量一般不大&#xff0c;开发相对简单。SQLynx是最近几年的数据库管理工具&#xff0c;Web开发&#xff0c;桌面版…...

pip 配置缓存路径

在windows操作平台&#xff0c;默认情况&#xff0c;pip下使用的系统目录 C:\Users\用名名称\AppData\Local\pip C盘是系统盘&#xff0c;如果常常使用pip安装会占用大量的空间很快就满&#xff0c;这时候就有必要变更一下缓存保存路径了。 pip 配置缓存路径&#xff1a; Win…...

大数据开发语言Scala(一) - Scala入门

引言 在当今的大数据时代&#xff0c;数据量和数据处理的复杂性不断增加&#xff0c;传统的编程语言已经难以满足需求。Scala作为一门新兴的编程语言&#xff0c;以其简洁、强大和高效的特性&#xff0c;迅速成为大数据开发的热门选择。本文将详细介绍Scala语言的基础知识&…...

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么???

大模型中的计算精度——FP32, FP16, bfp16之类的都是什么&#xff1f;&#xff1f;&#xff1f; 这些精度是用来干嘛的&#xff1f;&#xff1f;混合精度 mixed precision training什么是混合精度&#xff1f;怎么转换呢&#xff1f; 为什么大语言模型通常使用FP32精度训练量化…...

在矩池云使用GLM-4的详细指南(无感连GitHubHuggingFace)

GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本&#xff0c;在多项测试中表现出超越已有同等规模开源模型的性能&#xff0c;它能兼顾多轮对话、网页浏览、代码执行、多语言、长文本推理等多种功能&#xff0c;性能更加强大。其多模态语言模型GLM-4V-9B在…...

大模型日报2024-06-15

大模型日报 2024-06-15 大模型资讯 新技术提升大型语言模型推理能力 摘要: 一种新技术使得像GPT-4这样的大型语言模型能够通过编写Python代码&#xff0c;更准确地解决数值或符号推理任务。 大型语言模型革命性提升蛋白质序列理解 摘要: 研究人员将蛋白质序列与自然语言进行类比…...

【YOLO系列】YOLOv1学习(PyTorch)原理加代码

论文网址&#xff1a;https://arxiv.org/pdf/1506.02640 训练集博客链接&#xff1a;目标检测实战篇1——数据集介绍(PASCAL VOC&#xff0c;MS COCO)-CSDN博客 代码文件&#xff1a;在我资源里&#xff0c;但是好像还在审核&#xff0c;大家可以先可以&#xff0c;如果没有的…...

Postman接口测试工具详解:揭秘API测试的终极利器

在现代软件开发中&#xff0c;API接口测试是确保应用程序质量和可靠性的重要环节。Postman&#xff0c;作为一款功能强大且用户友好的API测试工具&#xff0c;受到了广大开发者和测试人员的青睐。本文将详细解析Postman的功能和优势&#xff0c;带你领略这款工具的魅力。 一、…...

紫光展锐5G处理器T750__国产手机芯片5G方案

展锐T750核心板采用6nm EUV制程工艺&#xff0c;CPU架构采用了八核设计&#xff0c;其中包括两个主频为2.0GHz的Arm Cortex-A76性能核心和六个主频为1.8GHz的A55小核。这种组合使得T750具备卓越的处理能力&#xff0c;并能在节能的同时提供出色的性能表现。该核心模块还搭载了M…...

基于深度学习的红外船舶检测识别分类完整实现数据集8000+张

随着遥感技术的快速发展&#xff0c;包括无人机、卫星等&#xff0c;红外图像在船舶检测识别中的作用日益凸显。相对于可见光图像&#xff0c;红外图像具有在夜晚和恶劣天气条件下高效检测识别船舶的天然优势。近年来&#xff0c;深度学习作为一种强大的图像处理技术&#xff0…...

ESP32嵌入式系统设计与实现指南

1. 项目概述1.1 系统架构本项目基于ESP32主控芯片设计&#xff0c;采用模块化架构实现多功能嵌入式系统。系统包含以下核心模块&#xff1a;主控单元&#xff1a;ESP32-WROOM-32D模组电源管理&#xff1a;TPS63020升降压转换器传感器接口&#xff1a;I2C/SPI多协议兼容设计人机…...

02.Linux常用文件操作命令

1.mkdir 目录名:创建目录 mkdir 目录名 mkdir -p a/b/c 创建多级目录 2.touch 创建空文件 touch 文件名 touch 文件名 文件名 创建多个文件 3.文件写入内容 echo写入 覆盖写入 echo 文件内容 >文件名 追加写入&#xff08;日志必用&#xff09; echo 文件内容 >…...

OpenClaw终端增强:Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF实现命令行智能补全与解释

OpenClaw终端增强&#xff1a;Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF实现命令行智能补全与解释 1. 为什么需要智能终端助手 作为每天与终端打交道的开发者&#xff0c;我经常陷入这样的困境&#xff1a;面对复杂的docker compose命令需要反复查阅文档&#xf…...

好用还专业!高效论文写作全流程AI论文网站推荐(2026 最新)

论文写作全流程可拆解为文献调研→选题/开题→大纲/初稿→文献综述→降重/去AI味→润色/格式→查重/投稿七大环节&#xff0c;以下工具按环节精准匹配&#xff0c;兼顾中文适配、降重能力、去AI痕迹、学术合规四大核心需求&#xff0c;覆盖免费/付费、通用/垂直场景。2026年AI论…...

Medusa小程序:微信、支付宝等小程序平台对接的完整指南

Medusa小程序&#xff1a;微信、支付宝等小程序平台对接的完整指南 【免费下载链接】medusa 项目提供了构建数字商务所需的组件和服务&#xff0c;旨在简化和加速电子商务平台的开发工作流程。 项目地址: https://gitcode.com/GitHub_Trending/me/medusa Medusa是一个强…...

终极MangoHud配置文件备份工具:轻松打造图形化管理界面

终极MangoHud配置文件备份工具&#xff1a;轻松打造图形化管理界面 【免费下载链接】MangoHud A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more. Discord: https://discordapp.com/invite/Gj5YmBb 项目地址: https://gitcode.com/gh_m…...

【实战解析】从期末试题到工程实践:摄影测量核心概念与计算全攻略

1. 从试卷到工地&#xff1a;摄影测量核心概念实战指南 第一次接触航测项目时&#xff0c;我盯着任务书上的"相机选型""航线规划"等要求完全懵了。这和期末考试那些名词解释、计算题有什么关系&#xff1f;直到在工地摔打半年后才明白&#xff0c;那些看似…...

js06----流程控制

目录 2.4.1、顺序流程控制 2.4.2、分支流程控制 &#xff08;1&#xff09;if分支语句&#xff08;条件判断语句&#xff09; &#xff08;2&#xff09;if....else...语句 需求1&#xff1a; 需求2&#xff1a; &#xff08;3&#xff09;if...else if...else语句&…...

AI绘画新革命:SDXL-Turbo镜像快速上手与实战测评

AI绘画新革命&#xff1a;SDXL-Turbo镜像快速上手与实战测评 想象一下这样的场景&#xff1a;你刚输入完几个单词&#xff0c;屏幕上就立即呈现出对应的图像。没有等待&#xff0c;没有延迟&#xff0c;就像思维直接转化为画面一样流畅。这就是SDXL-Turbo带来的AI绘画新体验—…...

别再只盯着GDP了!用Python+GIS手把手教你计算城市土地利用强度指数(附代码与数据)

PythonGIS实战&#xff1a;城市土地利用强度指数计算全流程指南 城市规划师和地理信息分析师们常常需要量化评估人类活动对土地资源的干扰程度。传统GDP指标无法全面反映这种影响&#xff0c;而土地利用强度指数&#xff08;LUI&#xff09;则提供了更科学的评估工具。本文将带…...