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

文本三剑客之grep命令和awk命令 1.0 版本

grep + awk

  • 1.grep命令
    • 1.1 基本格式
    • 1.2 常用选项
  • 2.awk命令
    • 2.1 awk工作原理
    • 2.2 awk命令格式
    • 2.3 awk常用内置变量

1.grep命令

1.1 基本格式

grep [选项]… 查找条件 目标文件


1.2 常用选项

选项功能
-m [ x ]匹配x次 后停止,x为具体数字
-v取反
-i忽略字符大小写
-n显示匹配的 行号
-c统计匹配的行数
-o 仅显示匹配到的字符串
-q静默模式,不输出任何信息
-A x after匹配内容的后x行
-B x before前x行
-C x context前后各x行
-e实现多个选项间的逻辑or关系
-w匹配 整个单词
-E 使用扩展正则表达式,相当于egrep
-F不支持正则表达式,相当于fgrep
-r递归目录,但不处理软链接
-R递归目录,但处理软链接
-f filefile 根据模式文件,处理两个文件相同内容 把第一个文件作为匹配条件
-color=auto对匹配到的文本着色显示
-m  匹配#次后停止grep -m 1 root /etc/passwd   #多个匹配只取第一个

在这里插入图片描述

-v 取反grep -Ev '^[[:space:]]*#|^$' /etc/fstab#非空行

在这里插入图片描述

-c 统计匹配的行数grep -c root /etc/passwd    #统计匹配到的行数

在这里插入图片描述

-A x after 匹配内容的后x行 grep -A3 root /etc/passwd   #匹配到的行后3行业显示出来

在这里插入图片描述

-e 实现多个选项间的逻辑or关系grep -e root -e bash /etc/passwd #包含root或者包含bash 的行grep -E root|bash  /etc/passwd #使用扩展正则表达式的写法

在这里插入图片描述

-w 匹配整个单词grep -w root /etc/passwd

在这里插入图片描述

2.awk命令

2.1 awk工作原理

+-----------------+
|    输入文件     |
|    或标准输入   |
+-----------------+|v
+-----------------+
|   分割输入行    |
+-----------------+|v
+-----------------+
|    匹配模式     |
+-----------------+|v
+-----------------+
|    执行动作     |
+-----------------+|v
+-----------------+
|   处理下一行    |
+-----------------+|v循环结束
  1. 读取输入:AWK首先读取输入文件或从标准输入接收输入;

  2. 分割输入:AWK默认将输入行分割成字段,并使用空格或制表符作为字段分隔符;

  3. 匹配模式:AWK使用模式匹配来确定需要处理的行,可以使用正则表达式或其他条件来指定匹配的行。如果没有指定模式,AWK将默认匹配所有行;

  4. 执行动作:当输入行与模式匹配时,AWK执行相应的动作;

  5. 处理下一行:一旦完成当前行的处理,AWK继续处理下一行,重复上述步骤。

2.2 awk命令格式

awk默认使用正则表达式 所以不需要\

#命令格式#
awk [选项] '[模式匹配条件]{操作 }'  文件1 文件2..
#选项##一般只有-F常用
-F  指定分隔符,默认的分隔符是若干个连续空白符,默认的时候可不写
-v  自定义变量
-f  脚本awk '/匹配条件/{ print $x }'#匹配条件可以不写 x为任意数字
#模式匹配条件格式#/    匹配条件       / 
# 起始               结束    
#/  / 一定要加 
#操作#
#常用的 只有 print awk  '{ print $1  }'awk '{ print $1 $2 $3 .... }'#awk会自动压缩空格,不需要再写tr -s '  '

2.3 awk常用内置变量

内置变量功能
FS指定每行文本的字段分隔符,缺省为空格或制表符(tab)。与 “-F”作用相同 -v “FS=:”
OFS输出时的分隔符
NF当前处理的行的字段个数
NR当前处理的行的行号(序数)
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
FILENAME被处理的文件名
RS行分隔符。awk从文件上读取资料时,将根据RS的定义就把资料切割成许多条记录,而awk一次仅读入一条记录进行处理。预设值是\n
###########  FS  #################
[root@localhost ky15]#awk -v FS=':' '{print $1FS$3}' /etc/passwd
#此处FS 相当于于变量  -v 变量赋值  相当于 指定: 为分隔符  
[root@localhost ky15]#awk -F: '{print $1":"$3}' /etc/passwdshell中的变量
[root@localhost ky15]#fs=":";awk -v FS=$fs '{print $1FS$3}' /etc/passwd
#定义变量传给FS#########   支持变量    ##################
[root@localhost ky15]#fs=":";awk -v FS=$fs -v OFS="+" '{print $1,$3}' /etc/passwd
#输出分隔符-F  -FS一起使用  -F 的优先级高############   OFS    ##########
[root@localhost ~]#awk -v FS=':' -v OFS='==' '{print $1,$3}' /etc/passwd
root==0
bin==1
daemon==2
adm==3
lp==4
sync==5########   RS    #######       
默认是已 /n (换行符)为一条记录的分隔符
不动他
[root@localhost ~]#echo $PATH | awk -v RS=':' '{print $0}'
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/root/bin##################   NF  ###################
代表字段的个数
[root@localhost ky15]#awk -F: '{print NF}' /etc/passwd[root@localhost ky15]#awk -F: '{print $NF}' /etc/passwd
#$NF最后一个字段[root@localhost ky15]#df|awk -F: '{print $(NF-1)}'
#倒数第二行
[root@localhost ky15]#df|awk -F "[ %]+" '{print $(NF-1)}'################    NR    ######################
行号
[root@localhost ky15]#awk '{print $1,NR}' /etc/passwd
##行号
[root@localhost ky15]#awk 'NR==2{print $1}' /etc/passwd
#只取第二行的第一个字段
[root@localhost ky15]#awk 'NR==1,NR==3{print}' passwd 
#打印出1到3 行
[root@localhost ky15]#awk 'NR==1||NR==3{print}' passwd
#打印出1和3行
[root@localhost ky15]#awk '(NR%2)==0{print NR}' passwd
#打印出函数取余数为0行
[root@localhost ky15]#awk '(NR%2)==1{print NR}' passwd
#打印出函数取余数为1的行
[root@localhost ky15]#awk 'NR>=3 && NR<=6{print NR,$0}' /etc/passwd[root@localhost ky15]#seq 10|awk 'NR>5 && NR<10'
#取 行间
6
7
8
9
[root@localhost ky15]#awk '$3>1000{print}' /etc/passwd
#注意分隔符
#打印出普通用户 第三列 大于1000 的行################ FNR  ############
[root@localhost data]#cat /etc/issue |wc -l
3
[root@localhost data]#cat /etc/os-release |wc -l
16
[root@localhost data]#awk '{print FNR}' /etc/issue /etc/os-release 
1
2
3
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16################ FILENAME ############
[root@localhost ~]#awk -F: 'NR==2{print FILENAME}' /etc/passwd
/etc/passwd

相关文章:

文本三剑客之grep命令和awk命令 1.0 版本

grep awk 1.grep命令1.1 基本格式1.2 常用选项 2.awk命令2.1 awk工作原理2.2 awk命令格式2.3 awk常用内置变量 1.grep命令 1.1 基本格式 grep [选项]… 查找条件 目标文件1.2 常用选项 选项功能 -m [ x ]匹配x次 后停止,x为具体数字-v取反 -i忽略字符大小写 -n显示匹配的 …...

【软件测试】Linux环境Ant调用Jmeter脚本并且生成测试报告(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 准备工作 需要在…...

MySQL的YEAR函数

MySQL的YEAR函数用于提取日期或日期时间值的年份部分。 语法&#xff1a; YEAR(date)参数&#xff1a; date&#xff1a;要提取年份的日期或日期时间值。 示例&#xff1a; SELECT YEAR(2023-08-09); -- 返回 2023SELECT YEAR(2023-08-09 14:16:20); -- 返回 2023注意事项…...

208、仿真-51单片机脉搏心率与心电报警Proteus仿真设计(程序+Proteus仿真+配套资料等)

毕设帮助、开题指导、技术解答(有偿)见文未 目录 一、硬件设计 二、设计功能 三、Proteus仿真图 四、程序源码 资料包括&#xff1a; 需要完整的资料可以点击下面的名片加下我&#xff0c;找我要资源压缩包的百度网盘下载地址及提取码。 方案选择 单片机的选择 方案一&a…...

787. 归并排序

文章目录 QuestionIdeasCode Question 给定你一个长度为 n 的整数数列。 请你使用归并排序对这个数列按照从小到大进行排序。 并将排好序的数列按顺序输出。 输入格式 输入共两行&#xff0c;第一行包含整数 n 。 第二行包含 n 个整数&#xff08;所有整数均在 1∼109 范围…...

【马蹄集】第二十二周——进位制与字符串专题

进位制与字符串专题 目录 MT2179 01操作MT2182 新十六进制MT2172 萨卡兹人MT2173 回文串等级MT2175 五彩斑斓的串 MT2179 01操作 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 刚学二进制的小码哥对加减乘除还不熟&#xff0c;他…...

【Spring Cloud +Vue+UniApp】智慧建筑工地平台源码

智慧工地源码 、智慧工地云平台源码、 智慧建筑源码支持私有化部署&#xff0c;提供SaaS硬件设备运维全套服务。 前言&#xff1a;互联网建筑工地&#xff0c;是将互联网的理念和技术引入建筑工地&#xff0c;从施工现场源头抓起&#xff0c;最大程度的收集人员、安全、环境、材…...

使用一个python脚本抓取大量网站【2/3】

一、说明 我如何使用一个 Python 脚本抓取大量网站&#xff0c;在第 2 部分使用 Docker &#xff0c;“我如何使用一个python脚本抓取大量网站”统计数据。在本文中&#xff0c;我将与您分享&#xff1a; Github存储库&#xff0c;您可以从中克隆它;链接到 docker 容器&#xf…...

黑马项目一完结后阶段面试45题 JavaSE基础部分20题(二)

十一、集合体系结构和特点 Collection └ List 有索引&#xff0c;存取一致&#xff0c;有序&#xff0c;元素允许重复 ┃ └ ArrayLIst ┃ └ LinkedList ┃ └ Vector └ Set 无索引&#xff0c;无序&#xff0c;元素不允许重复 └ HashSet └ TreeSet └ Linke…...

防御第九次作业

一、根据以下问题总结当天内容 1. SSL工作过程是什么&#xff1f; 当客户端向一个 https 网站发起请求时&#xff0c;服务器会将 SSL 证书发送给客户端进行校验&#xff0c;SSL 证书中包含一个公钥。校验成功后&#xff0c;客户端会生成一个随机串&#xff0c;并使用受访网站的…...

Java刷题——代码随想录Day1

代码随想录Day1 数组 二分查找 力扣704.二分查找 二分查找有几个最重要的特点&#xff1a; 对于需要用到”二分查找“的数组来说&#xff08;即用二分查找来找到确切的某一个元素&#xff09;&#xff0c;这个数组中的元素不能重复&#xff1b; 被操作的数组一定要是有序的…...

android,Compose,消息列表和动画(点击item的时候,就会删除)

Compose,消息列表和动画&#xff08;点击item的时候&#xff0c;就会删除&#xff09; package com.example.mycompose08import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundat…...

go-admin 使用开发

在项目中使用redis 作为数据缓存&#xff1a;首先引入该包 “github.com/go-redis/redis/v8” client : redis.NewClient(&redis.Options{Addr: config.QueueConfig.Redis.Addr, // Redis 服务器地址Password: config.QueueConfig.Redis.Password, // Redis 密码&…...

力扣的板子

板子 线性筛法求质因子的板子快速幂 线性筛法求质因子的板子 int limit 100000; //修改为题目中的数字的上限 bool isprime[100005] {0}; //保存所有1~limit中的数字是不是质数 int myprime[100005] {0}; //保存2~limit中所有数字的最小质因子 int primes[100000] {0}; …...

基于Matlab实现路径规划算法(附上15个完整仿真源码)

路径规划是机器人技术中非常重要的一项任务&#xff0c;它涉及到机器人在复杂环境中的自主移动和避障能力。在本文中&#xff0c;我们将介绍利用多种算法实现路径规划的Matlab程序&#xff0c;包括模拟退火算法、RRT算法、PRM算法、聚类算法、potential算法、GA算法、fuzzy算法…...

纯跟踪(Pure Pursuit)路径跟踪算法研究(2)

纯跟踪(Pure Pursuit)路径跟踪算法研究&#xff08;2&#xff09; 下午进行了简单的公式推导&#xff0c;理论推导部分是没有问题的 下面的博客提供了在实车上用 GPS 实现纯跟踪控制的一些思路和注意点 Pure Pursuit&#xff08;纯追踪算法&#xff09;ROS实践 并不急于在实车…...

前后端分离------后端创建笔记(02)

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…...

Webpack5 Preload/Prefetch技术

文章目录 什么是Preload/Prefetch技术一、Preload&#xff1a;确保必需资源的快速获取二、Prefetch&#xff1a;预加载未来可能使用的资源三、使用注意事项四、Prefetch&#xff1a;总结 什么是Preload/Prefetch技术 在现代Web开发中&#xff0c;页面加载速度对于用户体验至关…...

PHP原生类

什么是php原生类 原生类就是php内置类&#xff0c;不用定义php自带的类&#xff0c;即不需要在当前脚本写出&#xff0c;但也可以实例化的类 我们可以通过脚本找一下php原生类 <?php $classes get_declared_classes(); foreach ($classes as $class) {$methods get_clas…...

QGIS3.28的二次开发八:显示shp的属性表

这里实现两个基本的 GIS 软件需求&#xff1a;矢量图层的属性表显示&#xff0c;以及根据属性筛选要素。 具体需求如下&#xff1a; 加载一个矢量图层并打开其属性表&#xff1b;输入筛选条件确认无误后&#xff0c;画布上和属性表中均只显示筛选后的要素。 QGIS 提供了若干…...

深度学习模型效率评估:计算量、参数量与推理时间的实战解析

1. 为什么需要关注模型效率&#xff1f; 当你第一次训练深度学习模型时&#xff0c;可能会被准确率冲昏头脑。记得我刚开始做图像分类项目时&#xff0c;用ResNet50在测试集上刷到了95%的准确率&#xff0c;兴奋地准备部署上线。结果在实际应用中&#xff0c;服务器直接崩溃——…...

从上传到导出:清音听真1.7B语音识别完整操作流程详解

从上传到导出&#xff1a;清音听真1.7B语音识别完整操作流程详解 1. 认识清音听真1.7B语音识别系统 语音识别技术已经发展到了一个令人惊喜的阶段。想象一下&#xff0c;你刚参加完一场重要的会议&#xff0c;录音里混杂着各种背景噪音和多人发言&#xff0c;传统工具要么识别…...

Hunyuan-MT-7B开源镜像:Pixel Language Portal与LangChain集成构建翻译Agent

Hunyuan-MT-7B开源镜像&#xff1a;Pixel Language Portal与LangChain集成构建翻译Agent 1. 项目概览 Pixel Language Portal&#xff08;像素语言跨维传送门&#xff09;是一款基于腾讯Hunyuan-MT-7B大模型构建的创新翻译工具。不同于传统翻译软件的呆板界面&#xff0c;它采…...

数据结构实战:用双向循环链表实现高精度PI计算

1. 为什么需要高精度计算PI值 圆周率π是数学中最著名的常数之一&#xff0c;它出现在从几何到概率论的各个数学分支中。在计算机科学领域&#xff0c;π的计算精度常常被用作测试算法和硬件性能的基准。但你可能不知道的是&#xff0c;我们平时在编程语言中直接使用的π值&…...

GMS基本测试命令

1. 跑签名报告申请白名单的命令&#xff1a;run gts -m GtsEdiHostTestCases -s run cts -m CtsCurrentApiSignatureTestCases -t android.signature.cts.api.SignatureTest#testSignature -s 【devicesID】2. 全跑CTS报告命令&#xff1a;run cts -s 【devicesID】3. 全跑STS…...

SpringBoot 实战必备:AOP + ThreadLocal 核心知识点(附实战代码)

在 SpringBoot 项目开发中&#xff0c;AOP&#xff08;面向切面编程&#xff09;和 ThreadLocal 是高频实用技术&#xff0c;尤其在日志记录、用户上下文传递等场景中不可或缺。本文结合实际项目代码&#xff08;操作日志切面 登录用户ID存储&#xff09;&#xff0c;整理两者…...

从RNN到Transformer:为什么相对位置编码对长文本任务(如翻译、摘要)更友好?

从RNN到Transformer&#xff1a;相对位置编码如何优化长文本任务 在自然语言处理领域&#xff0c;序列建模的核心挑战之一是如何有效捕捉文本中的位置关系。早期的RNN模型通过其循环结构隐式地处理位置信息&#xff0c;而Transformer架构则彻底改变了这一范式。但当我们面对机器…...

STM32LL库实战入门:从零搭建高效开发环境

1. 为什么选择STM32 LL库开发&#xff1f; 第一次接触STM32 LL库的开发者可能会有疑问&#xff1a;已经有了HAL库和标准库&#xff0c;为什么还要学习LL库&#xff1f;这个问题要从嵌入式开发的效率需求说起。我在实际项目中遇到过这样的情况&#xff1a;使用STM32F030芯片做电…...

空洞骑士模组管理终极指南:Scarab一键安装与智能依赖解析

空洞骑士模组管理终极指南&#xff1a;Scarab一键安装与智能依赖解析 【免费下载链接】Scarab An installer for Hollow Knight mods written in Avalonia. 项目地址: https://gitcode.com/gh_mirrors/sc/Scarab Scarab是一款专为《空洞骑士》设计的开源模组管理器&…...

Kali Linux实战:用SET工具包5分钟克隆一个钓鱼网站(附谷歌浏览器登录凭证捕获演示)

Kali Linux实战&#xff1a;5分钟构建钓鱼网站与凭证捕获全流程 在网络安全领域&#xff0c;渗透测试工具的应用能力直接决定了安全防护的有效性。Social Engineer Toolkit&#xff08;SET&#xff09;作为Kali Linux中的明星工具包&#xff0c;以其高度集成化和易用性著称&am…...