linux中awk,sed, grep使用(待补充)

《linux私房菜》这本书中将sed和awk一同归为行的修改这一点,虽然对,但不利于实际处理问题时的思考。因为这样的话,当我们实际处理问题时,遇到比如说统计文本打印内容时,我们选择sed还是awk进行处理呢?
也因此

grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

这样的思路更便于我们处理问题时的思路。
比如我们的变量应用文本,需要根据环境进行编辑时,这时候使用sed来编辑脚本便是我们第一时间能想到的了。

awk

awk命令正如上面所说,可以格式化文本
体现就在于它的分隔符上,默认是空格。
修改方式有两种

awk -F":" aa.txt
awk '{FS=":"}' aa.txt

第二种会导致第一行不适用,需要在BEGIN中编写,因此直接用第一种。

awk根据分隔符可以将行内容分为多段,每段按照从左到右的顺序,用$1,$2, $3…来输出。$0输出整行。

基础使用可以输出指定列

比如说这个问题
在这里插入图片描述
计算内存和。

a=0
b=$(cat nowcoder.txt|sed '1d'|awk -F" " '{print $4}')
echo $b
for i in $bdoa=$(echo "$a+$i"|bc)done
echo $a

此外awk的内容是可以包含三部分的,除了必须的逐行处理的内容,还可以包含BEGIN和END的内容。BEGIN表示逐行处理前,END表示逐行处理结束后。

也即如下

awk 'BEGIN{FS=":"} {print $3} END{print "aaa"}' aaa.txt  

aaa.txt如下

a:b:c

输出如下
在这里插入图片描述
END可以获取到在逐行处理中的变量,下面有示例可以看到。

awk功能光如此也不足道,强的地方还在于它的逻辑处理。
我们可以在文本内部写java语法的循环判断,而不用遵守shell的循环判断语法格式

如下面这个问题,
在这里插入图片描述

awk '{num[$2] += 1} END{for(a in num) if(num[a] >= 2) print num[a] a}' nowcoder.txt|sort -n 
#除了内部循环以外也使用了一维数组。shell中变量在赋值时就会完成初始化,这种东西见仁见智吧,我不觉得有啥好用的。

shell的变量没有定义都是字符串,自然数组的指针也能是字符串。

可以看到,awk确实可以进行相对复杂的格式化处理。

又因为shell中数组指针是字符串,我们可以用此来定义多维数组,如何理解?也就是说我们可以定义一个类似于这样的数组

num[1,2]=xxxxx
num[1,3]=yyyyy

其中的"1,2"就是这个指针的字符串。
当我们想取时可以用循环遍历来取。
上面说的这些都是在awk块内部建立的,其余地方使用会报错的

你可能会想行数和列数怎么确定呢,事实上不存在给你一个已生成的数组,数组的初始化一般都是你自己建立的。所以行数和列数你是已知的。实在不知道,那就只能for a in 数组来遍历打印看看了。

如下面这个问题用到了二维数组

在这里插入图片描述
使用二维数组编写如下

awk '{for(i=1;i<=NF;i++){num[NR,i]=$i}} END{for(j=1;j<=(i-1);j++) {for(k=1;k<=NR;k++){printf num[k,j]"\t"}printf "\n"
}}' nowcoder.txt

END代码块中,NR最后保存为行数, i-1为列数。

awk使用能熟练到这个程度就差不多够了。

sed

grep更适合单纯的查找或匹配文本,sed更适合编辑匹配到的文本,awk更适合格式化文本,对文本进行较复杂格式处理。

还是这个思路,那么当我们遇到单纯编辑文本时,就可以直接考虑用sed

sed命令还是很强大的,
在我工作过程中,关于nginx配置文件的编辑,环境变量配置文件根据环境进行的修改来写脚本文件时,都会用到这个命令。

sed简单使用时,可以在指定的行下添加新行,删除该行,根据正则替换行内匹配到的内容。

如下面这个问题。
在这里插入图片描述

sed '/^.*[bB].*$/d' nowcoder.txt

sed使用并不复杂,因此用来处理的问题也不算复杂,但是该用的时候还是很好用的。
上面是匹配到对应行就删除该行,格式为

sed '/正则/d' 文件名

另一个比较常用的是替换
格式为

sed 's/正则/替换的内容/g' 文件名

如下面这个题

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

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

相关文章

VS Code 配置cmake(Linux环境)

通过sudo apt install cmake在linux上安装cmake 在Vs Code中安装这两个插件 通过命令whereis cmake获取linux中cmake的路径信息 右键CMake Tools右下角齿轮标志&#xff0c;选择扩展设置&#xff08;Extension Settings&#xff09; 注意要设置的是本地&#xff0c;还是远程连接…

添加用户页面(Flask+前端+MySQL整合)

首先导入Flask库和pymysql库。Flask用于创建Web应用程序&#xff0c;pymysql用于连接和操作MySQL数据库。 from flask import Flask, render_template, request import pymysql创建一个Flask应用实例。__name__参数告诉Flask使用当前模块作为应用的名称。 app Flask(__name_…

高效管理客户的秘诀:企业如何建立稳固的客户关系

如今的竞争&#xff0c;从商业模式、产品、服务到销售环节&#xff0c;竞争已经不再是单一层面的&#xff0c;而是全方位的&#xff0c;企业需要打造全价值链竞争优势。在这个过程中&#xff0c;客户管理的作用是无可替代的&#xff0c;成为企业成功的关键因素之一。如何高效地…

基于Java的蛋糕预定系统【附源码+LW】

摘 要 当今社会进入了科技进步、经济社会快速发展的新时代。国际信息和学术交流也不断加强&#xff0c;计算机技术对经济社会发展和人民生活改善的影响也日益突出&#xff0c;人类的生存和思考方式也产生了变化。传统购物方式采取了人工的管理方法&#xff0c;但这种管理方法存…

0628_ARM4

练习&#xff1a; stm32流水灯 .text .global _start _start: 使能GPIOE外设时钟 0X50000A28 RCC_MP_AHB4ENSETR[4]->1 LDR R0,0x50000a28 指定操作的内存地址 LDR R1,[R0] 将R0对应的地址空间中的值读取出来 ORR R1,R1,#(0x3<<4) 将第4,5位设置为1 STR…

.net 8 集成 MinIO文件存储服务,实现bucket管理,以及文件对象的基本操作

一、准备工作 1、本地部署MinIO服务 2、创建MinIO的Access Key 3、创建.net 项目 4、下载MinIO sdk 5、相关文档 二、编写MinIO工具类 三、管理存储桶 1、MyBucket类 &#xff08;1&#xff09;判断bucket是否存在 &#xff08;2&#xff09;新建bucket &#xff08…

AI大模型-关于推理、可解释性和 LLMs_ai 推理模型

引言&#xff1a;以下文章的主题我已经思考了很久&#xff0c;我希望能我的话能引起你的思考&#xff0c;并于一些更悲观的AI评论相均衡。推理和可解释性是充满细微差别的主题——我希望这篇文章能体现这一点。 去年 GPT-4 发布时&#xff0c;我注意到出现了一个特殊的议论&…

新能源行业必会基础知识-----电力市场概论笔记-----经济学基础

新能源行业知识体系-------主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/139946830 目录 1. 什么是市场2. 电力市场机制设计的基本要求 1. 什么是市场 经济学定义 市场是供需双方交易并决定商品价格和产量的机制市场可…

JVM原理(一):JVM运行时数据区域的分析

1. 程序计数器 程序计数器是一块较小的内存空间&#xff0c;它可以看作是当前线程所执行的字节码的行号指示器。 作用 在Java虛拟机的概念模型里&#xff0c;字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令&#xff0c;它是程序控制流的指示…

一站式企业服务平台能够帮助企业解决哪些问题?

近年来一站式企业服务平台备受区域政府及园区管理者的青睐&#xff0c;充当着区域政府或园区的千里眼和顺风耳&#xff0c;可以用来捕捉与区域经济发展相关的信息&#xff0c;也可以用来倾听企业的诉求&#xff0c;更是成为了区域深抓企业服务的多面手。 同时&#xff0c;一站式…

高电压技术-冲击高压发生器MATLAB仿真

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 冲击电压发生器是产生冲击电压波的装置&#xff0c;用于检验电力设备耐受大气过电压和操作过电压的绝缘性能&#xff0c;冲击电压发生器能产生标准雷电冲击电压波形&#xff0c;雷电冲击电压截波,标准操作冲击…

容器化spring boot应用程序

容器化spring boot应用程序有多种方式&#xff0c;如基于简单的Dockerfile&#xff0c;多阶段Dockerfile以及基于Docker Compose等&#xff0c;我们将逐步给大家介绍&#xff0c;本节主要介绍基于简单的Dockerfile进行容器化spring boot的应用程序。 创建Spring boot应用程序 …

未来科技中的RTK接收机应用探索

RTK实时差分定位技术&#xff08;RTK&#xff0c;Real-Time Kinematic&#xff09;&#xff0c;作为高精度定位技术的一种重要手段&#xff0c;已经在地理测绘、测量工程、航空航天等领域取得了广泛应用。随着科技的不断发展&#xff0c;RTK导航接收机的应用领域也日益拓宽。首…

AI大模型日报#0628:谷歌开源9B 27B版Gemma2、AI首次实时生成视频、讯飞星火4.0发布

导读&#xff1a;AI大模型日报&#xff0c;爬虫LLM自动生成&#xff0c;一文览尽每日AI大模型要点资讯&#xff01;目前采用“文心一言”&#xff08;ERNIE-4.0-8K-latest&#xff09;生成了今日要点以及每条资讯的摘要。欢迎阅读&#xff01;《AI大模型日报》今日要点&#xf…

合并排序的数组

题目链接 合并排序的数组 题目描述 注意点 A的末端有足够的缓冲空间容纳BA和B都是排序的 解答思路 最初想到的是双指针&#xff0c;从小到大找到合并B时应该A相应位置应该插入的元素&#xff0c;因为在插入的过程中B的元素会替换A原有位置的元素&#xff0c;所以需要先将A…

营销翻车,杜国楹出面道歉,小罐茶的“大师作”故事仓皇结尾

“小罐茶&#xff0c;大师作”&#xff0c;这句slogan曾一度在央视平台长时间、高密度播放&#xff0c;成为家喻户晓的广告词&#xff0c;也打响了小罐茶品牌的名号。但同时&#xff0c;市场上关于“大师作”真实性的质疑也从未停息。 就在6月25日小罐茶十二周年发布会上&#…

Jenkins容器的部署

本文主要是记录如何在Centos7上安装docker,以及在docker里面配置tomcat、mysql、jenkins等环境。 一、安装docker 1.1 准备工作 centos7、VMware17Pro 1.2 通过yum在线安装dokcer yum -y install docker1.3 启动docker服务 systemctl start docker.service1.4 查看docke…

JavaSE期末复习速成笔记

面向对象 1. 面向对象的概念 面向对象编程&#xff08;OOP&#xff09;是一种编程范式&#xff0c;它将现实世界的事物抽象为对象&#xff0c;通过类和对象来创建各种功能模块&#xff0c;以此来设计和开发软件。 2. 类与对象 类&#xff1a;是对象的模板&#xff0c;定义了…

自动化巡检革命:旗晟双圆管轨道机器人的创新应用

在输煤皮带线和矿山带式输送机的巡检过程中&#xff0c;面临着高湿度、多粉尘、温湿度极端、噪音干扰&#xff1b;设备磨损频繁&#xff0c;难以及时发现问题&#xff1b;传统的人工巡检方式存在劳动强度大、效率低、检测质量不稳定、数据采集和分析滞后&#xff0c;无法实现实…

oracle 11g rac创建实例时发现只给一节点创建了实例 二节点没创建的处理方法

由于操作失误没有在二节点创建实例 删除数据库重新dbca建库 [oracleracdg1-1 dbs]$ dbca -silent -deleteDatabase -sourceDB rac11dg1 -sysDBAUserName sys -sysDBAPassword oracle_4U Connecting to database 4% complete 9% complete 14% complete 19% complete 23% …