shell文本三剑客 awk 和 grep

awk 前言

AWK是一种优良的文本处理工具。它不仅是 Linux中也是任何环境中现有的功能最强大的数据处理引擎之一。

 Linux中最常用的文本处理工具有grep,sed,awk。行内将之称为文本三剑客,就功能量和效率来看,awk是当之无愧的文本三剑客之首。

grep主要用于过滤文本,sed用于修改文本,而awk则擅长处理和格式化文本

awk与vim的区别:

  • awk为加载一行处理一行,可以接受比较大的文件处理
  • vim为先加载整个文件到内存中处理,若内存不够大,无法打开大文件

一、awk的工作原理 

逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。即 读取一行处理一行,可以接受比较大的文件处理。
sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理。awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印显示。在使用awk命令的过程中,可以使用逻辑操作符“&&”表示“与”、“||”表示“或”、“!”表示“非”;还可以进行简单的数学运算,如+、-、*、/、%、^分别表示加、减、乘、除、取余和乘方。 

二、awk的语法

awk 选项 '模式或条件 {操作}' 文件 1 文件 2 …                   
awk -f 脚本文件 文件 1 文件 2 …                                 

  • 一定要用单引号。 
  • { }外指定条件,{ }内指定操作。
  • 内建变量,不能用双引号括起来,不然系统会把它当成字符串

三、基本打印用法

按行输出文本:

awk '{print}' 1.txt#输出所有内容
awk '{print $0}' 1.txt#输出所有内容
awk 'NR==1,NR==3{print}' 1.txt#输出第 1~3 行内容
awk '(NR>=1)&&(NR<=3){print}' 1.txt#输出第 1~3 行内容
awk 'NR==1||NR==3{print}' 1.txt#输出第1行、第3行内容
awk '(NR%2)==1{print}' 1.txt #输出所有奇数行的内容
awk '(NR%2)==0{print}' 1.txt#输出所有偶数行的内容
awk '/^p/{print}' /opt/2.txt#输出以 p 开头的行
awk '/q$/{print}' /opt/2.txt#输出以 q 结尾的行

awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd        #统计以/bin/bash 结尾的行数,等同于 grep -c "/bin/bash$" /etc/passwd
BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作;awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句

打印行内容及其行号:

awk '{getlinegetlinegetline;print$0}' 1.txt  #打印偶数行
awk '{print$0;getline}' 1.txt  #打印奇数行

getline 意思是滑倒下一行

一开始print$0是在1 上面  遇到getline 就滑倒下一行 就是2

反之

BEGIN:

awk 'BEGIN {...}; 条件{...}; END {...}' 文件


##BEGIN {...}  #表示处理文件前执行的操作
##条件{...}   #表示对匹配满足指定条件的文件行内容要执行的操作
##END {...}  #表示处理完文件所有行内容后要执行的操作
 
例:
awk 'BEGIN {x=0};/\/bin\/bash$/{x++};END {print x}' /etc/passwd        
#统计以/bin/bash 结尾的行数,等同于 grep -c  "/bin/bash$"  /etc/passwd

  • BEGIN模式表示,在处理指定的文本之前,需要先执行BEGIN模式中指定的动作
  • awk再处理指定的文本,之后再执行END模式中指定的动作,END{}语句块中,往往会放入打印结果等语句.

字段输出:

awk -F: '/q$/{print $1}' /opt/2.txt  #打印以bash结尾行的第一个字段
awk '/q$/{print $1,$3}' /opt/2.txt #输出多个列时,默认空格进行分隔

四、常见的内置变量

内置变量作用
$0当前处理的行的整行内容
$n当前处理行的第n个字段(第n列)
NR当前处理的行的行号(序数)
NF当前处理的行的字段个数。$NF代表最后一个字段
FS列分割符。指定每行文本的字段分隔符,默认为空格或制表位。与"-F"作用相同
OFS输出内容的列分隔符
FILENAME被处理的文件名
RS
行分隔符。awk从文件中读取资料时,将根据RS的定义把资料切割成许多条记录, 而awk一次仅读入一条记录进行处理。预设值是"\n"

NR: 表示行号

关于NF的使用 :表示最后一列
[root@localhost ~]#df |awk '{print $NF}'        ##挂载点[root@localhost ~]#df |awk '{print $(NF-1)}'    ##使用百分比

关于FS的使用:指定每行文本的字段分隔符,默认为空格或制表位
[root@localhost /ceshi]#awk -v "FS=:" '{print $1FS$3}' /etc/passwd
##与 -F":" [root@localhost /ceshi]#awk -F: '{print $1":"$3}' /etc/passwd
##-F和-FS一起使用时-F 的优先级高

关于RS的使用 :为换行符

将冒号作为换行的分隔符 把内容打印出来

五、实际运用

1、提取磁盘的分区利用率

df|awk '{print $5}'

2、提取用户名和uid号

cat /etc/passwd|awk -F: '{print $1,$3}'
##默认用空格分开
[root@localhost ~]#cat /etc/passwd|awk -F: '{print $1":"$3}'
##用冒号分隔开
[root@localhost ~]#cat /etc/passwd|awk -F: '{print $1"\t"$3}'
##用制表符分隔开

3、提取ip地址 
[root@localhost /ceshi]#hostname -I
192.168.20.6 192.168.122.1 
[root@localhost /ceshi]#hostname -I|awk '{print $1}'
192.168.20.6
[root@localhost /ceshi]#ifconfig ens33|sed -n '2p' |awk '{print $2}'
192.168.20.6
4、awk的统计用法
[root@localhost /ceshi]#grep -c "/bin/bash$" /etc/passwd
4
[root@localhost /ceshi]#cat /etc/passwd|awk '{x++}END{print x}'
44
[root@localhost /ceshi]#cat /etc/passwd|wc -l
44
[root@localhost /ceshi]#cat /etc/passwd|awk '/bash$/{x++}END{print x}'
4
5、计算磁盘使用率及空闲率
df | grep -w "/" | awk '{print $5}'                  #磁盘使用率
df | grep -w "/" | awk '{print 100-$5"%"}'     #磁盘空闲率

6、检测本机cpu 15分钟内的平均负载

[root@localhost awk]#uptime|awk '{print $NF}'

      一般超过百七十,就要注意了

grep前言

grep 命令是一个在 Linux/Unix 操作系统中用于查找文本的工具,grep 命令能够对指定的文件或标准输入进行搜索,并输出包含匹配文本的行。

grep 命令是一个非常强大的文本搜索工具,支持基本正则表达式、扩展正则表达式和固定字符串的匹配模式,可以帮助用户快速地定位文件中的关键信息,提高工作效率。

一、 基本用法

grep 命令的基本语法格式为:

grep [参数] 搜索模式 [路径]

例在文件 2.txt中搜索字符串 2q,可以使用以下命令:

grep 2q 2.txt


如果要搜索多个文件,可以指定多个文件名或使用通配符
例搜索所有以 q结尾的字符串,可以使用以下命令:

grep q* 2.txt



二、常用选项

grep 命令常用的选项:

  • -i:忽略大小写;
  • -r:递归搜索子目录;
  • -n:显示匹配行的行号;
  • -c:只显示匹配行的数量;
  • -v:反转匹配,即只显示不匹配的行;
  • -w:只匹配整个单词,不匹配子串;
  • -o :表示只输出匹配部分,而不是整行;
  • -E:使用扩展正则表达式;
  • -F:将模式视为固定字符串而非正则表达式。
  • -h:表示不显示文件名

例 忽略大小写和显示匹配行的行号,可以使用以下命令:

grep -in "P" 2.txt

三. 正则表达式

grep 命令支持基本正则表达式(BRE)、扩展正则表达式(ERE)和固定字符串三种匹配模式。

基本正则表达式
  • .                   :匹配任意一个字符;
  • []                  :匹配括号中的任意一个字符;
  • [^]                :匹配不在括号中的任意一个字符;
  • [:class:]       :匹配指定字符类中的任意一个字符,例如 [:digit:] 表示数字字符。

常用的特殊序列包括:

  • ^         :匹配行首;
  • $         :匹配行尾;
  • \<        :匹配单词首;
  • \>        :匹配单词尾;
  • \n        :匹配换行符。

如要在文件 2.txt 中搜索以  q 开头的行,可以使用以下命令:

grep '^q' 2.txt  #要在文件2 .txt 中搜索以 q开头的行

  • +         :匹配一个或多个前导字符;
  • *          :匹配零个或多个前导字符;
  • ?         :匹配零个或一个前导字符;
  • {n}       :匹配恰好 n 个前导字符;
  • {n,}      :匹配至少 n 个前导字符;
  • {n,m}   :匹配至少 n 个且不超过 m 个前导字符;
  • ()         :分组匹配;
  • |          :或运算符。

 如要在文件 2.txt 中搜索以 hello 开头且后面跟着一个或多个空格的行,可以使用以下命令

grep '^hello[[:space:]]+' 2.txt
 ^与$的运
# 搜索以数字开头的行
grep '^[0-9]' file.txt# 搜索以数字结尾的行
grep '[0-9]$' file.txt# 搜索包含数字的行
grep '[0-9]' file.txt
匹配整个单词

grep 默认会匹配到包含搜索词的所有行,包括单词的一部分。如果需要只匹配完整单词,可以使用 ‘-w’ 选项。

# 搜索包含单词 'hello' 的行
grep 'hello' file.txt# 只搜索包含完整单词 'hello' 的行
grep -w 'hello' file.txt
搜索多个文件

如果需要在多个文件中搜索,可以使用通配符或者正则表达式。

# 搜索多个文件
grep 'hello' file1.txt file2.txt file3.txt# 搜索文件夹下的所有 txt 文件
grep 'hello' *.txt# 搜索文件夹下的所有文件
grep 'hello' *
显示匹配行的上下文

使用 ‘-A’ 和 ‘-B’ 选项可以显示匹配行的上下文。

# 显示匹配行的前 3 行和后 3 行
grep -A 3 -B 3 'hello' file.txt
反向搜索

使用 ‘-v’ 选项可以反向搜索,即只显示不匹配的行。

# 只显示不包含单词 'hello' 的行
grep -v 'hello' file.txt
统计匹配次数

使用 ‘-c’ 选项可以统计匹配次数。

# 统计包含单词 'hello' 的行数
grep -c 'hello' file.txt

总结

' '  单引号内的内容被视为字面字符串
" " 双引号允许变量扩展和命令替换   (如双引号号内有变量可引用变量)

( ) 分组匹配
[ ] 匹配括号中的任意一个字符
{n} 匹配恰好 n 个前导字符

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

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

相关文章

本地密码记录工具-KeePass

文章目录 软件界面软件下载KeePass配置KeePass修改中文创建数据库配置数据库锁定配置账户密码为不同应用配置账号密码插件安装及使用 数据库同步 在此之前&#xff0c;没有使用过类似的账户密码记录工具&#xff0c;甚至完全没有接触过&#xff0c;由于Edge浏览器自带保存密码并…

【Kafka】Kafka Producer 分区-05

【Kafka】Kafka Producer 分区-05 1. 分区的好处2. 分区策略2.1 默认的分区器 DefaultPartitioner 3. 自定义分区器 1. 分区的好处 &#xff08;1&#xff09;便于合理使用存储资源&#xff0c;每个Partition在一个Broker上存储&#xff0c;可以把海量的数据按照分区切割成一块…

什么是DMZ?路由器上如何使用DMZ?

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 DMZ 📒🚀 DMZ的应用场景💡 路由器设置DMZ🎈 注意事项 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在网络管理中,DMZ(Demilitarized Zone,隔离区)是一个特殊的网络区域,常用于将公共访问和内部网络隔离开来。DMZ功能允许…

完美的移动端 UI 风格让客户无可挑剔

完美的移动端 UI 风格让客户无可挑剔

GDB:从零开始入门GDB

目录 1.前言 2.开启项目报错 3.GDB的进入和退出 4.GDB调试中查看代码和切换文件 5.GDB调试中程序的启动和main函数传参 6.GDB中断点相关的操作 7.GDB中的调试输出指令 8.GDB中自动输出值指令 9.GDB中的调试指令 前言 在日常开发中&#xff0c;调试是我们必不可少的技能。在专业…

算法day26

第一题 429. N 叉树的层序遍历 本题的要求我们可以通过队列来辅助完成层序遍历&#xff1b; 如下图的n叉树&#xff1a; 步骤一&#xff1a; 我们定义一个队列&#xff0c;先进行根节点入队列操作&#xff1b; 步骤二&#xff1a; 我们进行当前队列每一个元素的出队列操作&…

功能强大的API函数FindFirstFile使用介绍(附源码)

在处理文件的相关代码中,会频繁使用到Windows系统API函数FindFirstFile,这个函数功能很强大,很多功能都不开它。本文就根据我们在项目中使用该函数的情况,来大概地梳理一下使用FindFirstFile都可以实现哪些常用的功能。 1、FindFirstFile函数声明与WIN32_FIND_DATA结构体 我…

接口测试详解

接口测试详解 本文主要讲软件接口 一、什么是接口&#xff1f;硬件接口&#xff1a;硬件接口指的是硬件提供给外界的一种实体。主要作用是内部数据分离出外 部的沟通方法 目的是&#xff1a;沟通外部来改变内部的数据。如&#xff1a;USB接口&#xff0c;投影仪接口 软件接口…

Hadoop 2.0:主流开源云架构(三)

目录 四、Hadoop 2.0体系架构&#xff08;一&#xff09;Hadoop 2.0公共组件Common&#xff08;二&#xff09;分布式文件系统HDFS&#xff08;三&#xff09;分布式操作系统Yarn&#xff08;四&#xff09;Hadoop 2.0安全机制简介 四、Hadoop 2.0体系架构 &#xff08;一&…

c++使用nlohmann读取json文件

下载&#xff1a; GitHub - nlohmann/json: JSON for Modern C 解压&#xff1a; 包含头文件&#xff1a; 要包含的头文件和要使用的命名空间&#xff1a; #include <nlohmann/json.hpp>using json nlohmann::json; 测试文件&#xff1a; 代码&#xff1a; #include…

Vscode中使用make命令

前言 需要注意&#xff0c;如下操作需要进行网络代理&#xff0c;否则会出现安装失败的情况 安装 第一步 — 安装MingGW &#xff08;1&#xff09;进入官网下载 &#xff08;2&#xff09;下载完成之后&#xff0c;双击exe文件 &#xff08;3&#xff09;点击Install &#x…

远程桌面端口,远程桌面改端口有哪些方法

方法一&#xff1a;通过修改注册表 步骤一&#xff1a;打开注册表编辑器 按下 Windows键R 打开“运行”对话框。输入 regedit 并按 Enter 打开注册表编辑器。 步骤二&#xff1a;定位到远程桌面服务的端口设置 导航至第一个注册表路径&#xff1a;HKEY_LOCAL_MACHINE\SYSTE…

抢占人工智能行业红利,前阿里巴巴产品专家带你15天入门AI产品经理

前言 当互联网行业巨头纷纷布局人工智能&#xff0c;国家将人工智能上升为国家战略&#xff0c;藤校核心课程涉足人工智能…人工智能领域蕴含着巨大潜力&#xff0c;早已成为业内共识。 面对极大的行业空缺&#xff0c;不少人都希望能抢占行业红利期&#xff0c;进入AI领域。…

多线程中run()和start()的区别

我们知道&#xff0c;在多线程中 Thread thread new Thread(runnable); thread.start();以及 thread.run();都可以执行runnable中run方法下的代码&#xff0c;但是二者又有所不同 下面给出一段代码用以体现二者的区别&#xff1a; 以下代码中&#xff0c;通过thread.start()启…

探索互联网寻址机制 | 揭秘互联网技术的核心,解析网络寻址

揭秘互联网技术的核心&#xff0c;解析网络寻址题 前提介绍局域网地址IP地址的分配方式动态IP分配机制内部网&#xff08;intranet&#xff09;ICANN负责IP分配DHCP协议获取IP地址 域名系统域名是什么域名工作方式hosts文件存储域名映射关系DNS分布式数据库DNS域名解析 Java进行…

搭建知识付费APP平台教学:在线教育系统源码详解

如何搭建一个高效的知识付费APP平台呢&#xff1f;今天&#xff0c;笔者将详细解析在线教育系统的源码&#xff0c;帮助您快速搭建自己的知识付费APP平台。 一、平台的核心功能 一个完整的知识付费APP平台通常需要具备以下核心功能&#xff1a; 用户管理 内容管理 支付 课…

【秋招突围】2024届秋招笔试-小红书笔试题-第一套-三语言题解(Java/Cpp/Python)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f4e7; 清隆这边…

CrossOver 2024软件安装包下载

CrossOver不像Parallels或VMware的模拟器&#xff0c;而是实实在在Mac OS X系统上运行的一个软件。CrossOvers能够直接在Mac上运行Windows软件与游戏&#xff0c;而不需虚拟机。它为Windows软件提供所需的资源&#xff0c;以达到在Mac OS X系统上运行Windows程序的目的。 安 装…

模型 WOOP

说明&#xff1a;系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。不再拖延和懒惰&#xff0c;让梦想照进现实。 1 WOOP模型的应用 1.1 WOOP模型提高自己健身习惯 如果你想要养成健身的习惯&#xff0c;那么使用WOOP模型来提高自己健身习惯&#xf…

【第9章】Vue之Element Plus快速入门

文章目录 前言一、安装1. 兼容性2. 安装 二、按需导入1.自动导入2.Vite 三、全局配置四、官方案例五、效果总结 前言 基于 Vue 3&#xff0c;面向设计师和开发者的组件库。 一、安装 1. 兼容性 Element Plus 目前还处于快速开发迭代中。 由于 Vue 3 不再支持 IE11&#xff0c…