当前位置: 首页 > 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 提供了若干…...

蓝桥杯 2024 15届国赛 A组 儿童节快乐

P10576 [蓝桥杯 2024 国 A] 儿童节快乐 题目描述 五彩斑斓的气球在蓝天下悠然飘荡&#xff0c;轻快的音乐在耳边持续回荡&#xff0c;小朋友们手牵着手一同畅快欢笑。在这样一片安乐祥和的氛围下&#xff0c;六一来了。 今天是六一儿童节&#xff0c;小蓝老师为了让大家在节…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

【配置 YOLOX 用于按目录分类的图片数据集】

现在的图标点选越来越多&#xff0c;如何一步解决&#xff0c;采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集&#xff08;每个目录代表一个类别&#xff0c;目录下是该类别的所有图片&#xff09;&#xff0c;你需要进行以下配置步骤&#x…...

Spring AI与Spring Modulith核心技术解析

Spring AI核心架构解析 Spring AI&#xff08;https://spring.io/projects/spring-ai&#xff09;作为Spring生态中的AI集成框架&#xff0c;其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似&#xff0c;但特别为多语…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

前端中slice和splic的区别

1. slice slice 用于从数组中提取一部分元素&#xff0c;返回一个新的数组。 特点&#xff1a; 不修改原数组&#xff1a;slice 不会改变原数组&#xff0c;而是返回一个新的数组。提取数组的部分&#xff1a;slice 会根据指定的开始索引和结束索引提取数组的一部分。不包含…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...