正则表达式-“三剑客”(grep、sed、awk)
1.3正则表达式
正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符号某个条件的子串等,在linux中代表自定义的模式模版,linux工具可以用正则表达式过滤文本。Linux工具能够在处理数据时使用正则表达式对数据进行模式匹配,如果数据符合匹配的要求,那么就会进入下一步处理,如果数据不符合匹配的要求,就会被过滤掉
1.3.1 grep命令
grep(global regular expression print):表示全局正则表达式,使用权限是所有用户,grep命令是文本搜集工具,能够使用正则表达式搜索文本,并把匹配的行打印出来
-m 匹配几次后停止 -v 反选 -i 忽略字符大小写 -n 显示匹配行号 -c 统计匹配行数 -o 仅显示匹配到的字符串 -q 静默模式 -A 后几行 -B 前几行 -C 前后各几行 -e 多个选项之间“或者”关系 -w 匹配整个单词 -E 启用扩展正则表达式=egrep -F 不支持正则表达式=fgrep -f 处理两个文件的相同内容,以第一个文件作为匹配条件 -r 递归,但不处理软链接 -R 递归,处理软链接 |
示例:A、B、C用法
#打印包含halt的行以及下面三行 [root@localhost ~]# grep -A3 "halt" /etc/passwd halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin #打印包含halt的行以及上面三行 [root@localhost ~]# grep -B3 "halt" /etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt #打印包含halt的行以及上下面三行 [root@localhost ~]# grep -C3 "halt" /etc/passwd lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin sync:x:5:0:sync:/sbin:/bin/sync shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin games:x:12:100:games:/usr/games:/sbin/nologin |
过滤出带有某个关键词的行,并输出行号
[root@localhost ~]# grep -n "root" /etc/passwd 1:root:x:0:0:root:/root:/bin/bash 10:operator:x:11:0:operator:/root:/sbin/nologin |
过滤出不带有某个关键词的行,并输出行号
过滤出所有包含数字的行
[root@localhost ~]# grep "[0-9]" /etc/inittab # multi-user.target: analogous to runlevel 3 # graphical.target: analogous to runlevel 5 |
过滤掉所有以#开头的行
过滤掉所有空行和以#开头的行
[root@localhost etc]# grep -v "^#" /etc/fstab |grep -v "^$" /dev/mapper/centos-root / xfs defaults 0 0 UUID=ee382caa-3a27-4985-a6a0-2920648fe4f4 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 |
在正则表达式中,^表示行的开始,$表示行的结尾,那么空行则可以用^$表示
过滤出任意一个字符和重复字符
[root@localhost ~]# grep "r.o" /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin .表示任意一个字符,上例中,r.o表示把r与o之间有一个任意字符的行过滤出来 [root@localhost ~]# grep "ooo*" /etc/passwd root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin mail:x:8:12:mail:/var/spool/mail:/sbin/nologin operator:x:11:0:operator:/root:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin *表示零个或多个*前面的字符,上例中,ooo*表示oo、ooo、oooo.....或者更多的 [root@localhost ~]# grep ".*" /etc/passwd |wc -l 19 [root@localhost ~]# wc -l /etc/passwd 19 /etc/passwd *表示零个或多个*前面的字符,空行也包含在内,它会把/etc/passwd文件里面的所有行都匹配到 |
指定要过滤出的字符出现次数
1.3.2 sed命令
sed编辑器是一种流编辑器,流编辑器会在编辑器处理数据之前基于预先提供的一组规则来编辑数据流
sed编辑器可以根据命令来处理数据流中的数据,这些命令要么从命令行中输入,要么存储在一个命令文本文件中
s 替换,替换指定字符 d 删除,删除选定的行 a 增加,在当前行下面增加一行指定内容 i 插入,在选定行上面插入一行指定内容 c 替换,将选定行替换为指定内容 Y 字符转换,转换前后的字符长度必须相同 p 打印,如果同时指定行,表示打印指定行;如果不指定行,则表示打印所有内容;如果有非打印字符,则以ASCII码输出。其通常与"-n"选项一起使用 = 打印行号 l 打印数据流中的文本和不可打印的ASCII字符(比如结束符$、制表符\t) |
打印某行
[root@localhost ~]# sed -n '2'p /etc/passwd bin:x:1:1:bin:/bin:/sbin/nologin |
打印所有行
打印某个区间内的行数
[root@localhost ~]# sed -n '1,3'p /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin |
打印包含某个字符串的行
[root@localhost ~]# sed -n '/root/'p /etc/passwd root:x:0:0:root:/root:/bin/bash operator:x:11:0:operator:/root:/sbin/nologin |
删除某些行
[root@localhost ~]# sed '1'd /etc/passwd |
1.3.3 awk命令
awk是一种处理文本文件的语言,是一个强大的文本分析工具,可以在无交互的模式下实现复杂的文本操作,相较于sed常作用于一整个行的处理,awk则比较倾向于一行当中分成数个字段来处理,因为awk相当适合小型的文本数据
awk格式及原理
awk命令逐行读取文本,默认以空格或tab键为分隔符进行分隔,将分隔所得的各个字段保存到内建变量中,并按模式或者条件执行编辑命令。sed命令常用于一整行的处理,而awk比较倾向于将一行分成多个“字段”然后再进行处理,awk信息的读入也是逐行读取的,执行结果可以通过print的功能将字段数据打印
FS 列分隔符,指定每行文本的字段分隔符,默认为空格或制表位,与-F作用相同 NF 当前处理的行的字段个数 NR 当前处理的行的行号(序数) $0 当前处理的行的整行内容 $n 当前处理行的第n个字段(第n列) FILENAME 被处理的文件名 RS 行分隔符。awk从文件上读取资料时,将根据RS的定义把资料切割成许多条记录,而awk一次仅读入一条记录,以进行处理。预设值是’\n’ $NF 最后一段 $(NF-1) 倒数第二段 |
截取文档中的某个段
[root@localhost ~]# head -n2 test.txt |awk -F ':' '{print $1}' root Bin 解析: Awk是一个强大的文本处理工具 -F‘:’:选项指定字段分隔符为冒号 {print $1}:表示打印每行的第一个字段 [root@localhost ~]# head -n2 test.txt |awk -F ':' '{print $0}' root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin |
匹配字符或者字符串
[root@localhost ~]# awk '/oo/' test.txt root:x:0:0:root:/root:/bin/bash lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin [root@localhost ~]# awk -F ':' '$1 ~/oo/' test.txt root:x:0:0:root:/root:/bin/bash |
条件操作符
[root@localhost ~]# awk -F ':' '$3=="0"' /etc/passwd [root@localhost ~]# awk -F ':' '$3>="500"' /etc/passwd shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown halt:x:7:0:halt:/sbin:/sbin/halt mail:x:8:12:mail:/var/spool/mail:/sbin/nologin nobody:x:99:99:Nobody:/:/sbin/nologin dbus:x:81:81:System message bus:/:/sbin/nologin polkitd:x:999:998:User for polkitd:/:/sbin/nologin sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin postfix:x:89:89::/var/spool/postfix:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin [root@localhost ~]# awk -F ':' '$3>=500' /etc/passwd polkitd:x:999:998:User for polkitd:/:/sbin/nologin chrony:x:998:996::/var/lib/chrony:/sbin/nologin |
awk的内置变量
awk常用的变量有OFS、NF和NR,OFS和-F选项有类似的功能,也是用来定义分隔符的,但是他是在输出的时候定义,NF表示用分隔符分隔后一共有多少段,NR表示行号
OFS的用法示例如下:
[root@localhost ~]# head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}' root#0#0 bin#1#1 daemon#2#2 adm#3#4 lp#4#7 |
变量NF的具体用法如下:
[root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print NF}' 7 7 7 [root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print $NF}' /bin/bash /sbin/nologin /sbin/nologin |
变量NR的具体用法如下
[root@localhost ~]# head -n3 /etc/passwd |awk -F ':' '{print NR}' 1 2 3 |
还可以使用NR作为判断条件,如下所示
awk中的数学运算,示例命令如下
awk可以更改段值,示例命令如下
[root@localhost ~]# head -n 3 /etc/passwd |awk -F ':' '$1="root"' root x 0 0 root /root /bin/bash root x 1 1 bin /bin /sbin/nologin root x 2 2 daemon /sbin /sbin/nologin |
awk也可以进行对各个段的值进行数学运算,示例命令如下
[root@localhost ~]# head -n2 /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin [root@localhost ~]# head -n2 /etc/passwd |awk -F ':' '{$7=$4+$3}' [root@localhost ~]# head -n2 /etc/passwd |awk -F ':' '{$7=$4+$3;print $0}' root x 0 0 root /root 0 bin x 1 1 bin /bin 2 |
awk还可以计算某个段的总和,实力命令如下
[root@localhost ~]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd 2605 |
这里的END是awk特有的语法,表示所有的行都已经执行。
[root@localhost ~]# awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd root:x:0:0:root:/root:/bin/bash |
相关文章:

正则表达式-“三剑客”(grep、sed、awk)
1.3正则表达式 正则表达式描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串,将匹配的子串替换或者从某个串中取出符号某个条件的子串等,在linux中代表自定义的模式模版,linux工具可以用正则表达式过滤文本。Linux…...

数智时代的新航向:The Open Group 2024生态系统架构·可持续发展年度大会邀您共筑AI数字新时代
在全球可持续发展和数字化转型双重驱动下,企业正面临着前所未有的挑战与机遇。如何在激烈的市场竞争中,实现业务增长的同时,履行社会责任,达成可持续发展的目标?The Open Group 2024生态系统架构可持续发展年度大会将于…...
TensorFlow 的核心概念
TensorFlow 是一个开源的机器学习框架,由 Google 开发和维护。它提供了一个强大的工具集,用于构建和训练各种机器学习模型。 TensorFlow 的核心概念是计算图(Computational Graph)。计算图由节点(Nodes)和…...

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(动态新增、修改等操作)
SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(动态新增、修改等操作) 前言数据库脚本创建需要被调度的方法创建相关实体类创建业务层接口创建业务层实现类控制层类测试结果 前言 我这边的SpringBoot的版本为2…...

Matlab详细学习教程 MATLAB使用教程与知识点总结
Matlab语言教程 章节目录 一、Matlab简介与基础操作 二、变量与数据类型 三、矩阵与数组操作 四、基本数学运算与函数 五、图形绘制与数据可视化 六、控制流与逻辑运算 七、脚本与函数编写 八、数据导入与导出 九、Matlab应用实例分析 一、Matlab简介与基础操作 重点内容知识…...

【ELKB】Kibana使用
搭建好ELKB后访问地址:http://localhost:5601 输入账号密码登录以后 左侧导航有home、Analysis、Enterprise search 、Observability、Security、Management home:首页Analysis:工具来分析及可视化数据Enterprise search:企业级搜…...
ChatGPT免费使用:人工智能在现代社会中的作用
随着人工智能技术的不断发展,越来越多的应用程序和工具开始使用GPT作为其语言模型。但是,这些应用程序和工具是否收费?如果是免费的,那么他们是如何盈利的?在本文中,我们将探讨ChatGPT免费使用的背后原理&a…...

腾讯音乐:从 Elasticsearch 到 Apache Doris 内容库升级,统一搜索分析引擎,成本直降 80%
导读: 为满足更严苛数据分析的需求,腾讯音乐借助 Apache Doris 替代了 Elasticsearch 集群,统一了内容库数据平台的内容搜索和分析引擎。并基于 Doris 倒排索引和全文检索的能力,支持了复杂的自定义标签计算,实现秒级查…...

CubeMX的FreeRTOS学习
一、FreeRTOS的介绍 什么是FreeRTOS? Free即免费的,RTOS的全称是Real Time Operating system,中文就是实时操作系统。 注意:RTOS不是指某一个确定的系统,而是指一类的操作系统。比如:us/OS,FreeRTOS&…...

C语言初始:数据类型和变量
、 一.数据类型介绍 人有黄人白人黑人,那么数据呢? 我们大家可以看出谁是黄种人,谁是白种人,谁是黑种人,这是因为他们是类似的。 数据也是有类型的,就譬如整数类型,字符类型,浮点…...

Linux shellcheck工具
安装工具 通过linux yum源下载,可能因为yum源的问题找不到软件包,或者下载的软件包版本太旧。 ShellCheck的源代码托管在GitHub上(推荐下载方式): GitHub - koalaman/shellcheck: ShellCheck, a static analysis tool for shell scripts 对下…...
FLINK SQL时间属性
Flink三种时间属性简介 在Flink SQL中,时间属性是一个核心概念,它主要用于处理与时间相关的数据流。Flink支持三种时间属性:事件时间(event time)、处理时间(processing time)和摄入时间&#…...
android——Groovy gralde 脚本迁移到DSL
1、implementation的转换 implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:*** 转换为 implementation ("com.github.CymChad:BaseRecyclerViewAdapterHelper:***") 2、plugin的转换 apply plugin: kotlin-android-extensions 转换为&#x…...
工程项目管理中的最常见概念!蓝燕云总结!
01 怎么理解工程项目管理? 建设工程项目管理指的是专业性的管理,并非行政事务管理。建设工程项目管理是对工程项目全生命周期的管理,确保项目能够按计划的进度、成本和质量完成。 建设工程项目不同阶段管理的主要内容不同,通常…...
PostgreSQL AUTO INCREMENT
PostgreSQL AUTO INCREMENT 在数据库管理系统中,自动递增(AUTO INCREMENT)是一种常见特性,用于在插入新记录时自动生成唯一的标识符。PostgreSQL,作为一个功能强大的开源关系数据库管理系统,也提供了类似的…...

24-10-13-读书笔记(二十五)-《一只特立独行的猪》([中] 王小波)用一生来学习艺术
文章目录 《一只特立独行的猪》([中] 王小波)目录阅读笔记记录总结 《一只特立独行的猪》([中] 王小波) 十月第五篇,放慢脚步,秋季快要过去了,要步入冬季了,心中也是有些跌宕起伏&am…...

Java—继承性与多态性
目录 一、this关键字 1. 理解this 2. this练习 二、继承性 2.1 继承性的理解 2.1.1 多层继承 2.2 继承性的使用练习 2.2.1 练习1 2.2.2 练习2 2.3 方法的重写 2.4 super关键字 2.4.1 子类对象实例化 三、多态性 3.1 多态性的理解 3.2 向下转型与多态练习 四、Ob…...

打通华为认证实验考试“痛点”:备考指南全解析
华为认证体系中的实验考试环节,尤其是针对高端的HCIE认证,是评估考生实践技能的关键部分。这一环节的核心目标是检验考生对华为设备和解决方案的操作熟练度、技术实施技能以及面对现实工作挑战时的问题解决能力。通过在真实环境中进行的实践操作…...
【软考】子系统划分
目录 1. 子系统划分的原则1.1 子系统要具有相对独立性1.2 子系统之间数据的依赖性尽量小1.3 子系统划分的结果应使数据几余较小1.4 子系统的设置应考虑今后管理发展的需要1.5 子系统的划分应便于系统分阶段实现1.6 子系统的划分应考虑到各类资源的充分利用 2. 子系统结构设计3.…...

【Python】selenium获取鼠标在网页上的位置,并定位到网页位置模拟点击的方法
在使用Selenium写自动化爬虫时,遇到验证码是常事了。我在写爬取测试的时候,遇到了点击型的验证码,例如下图这种: 这种看似很简单,但是它居然卡爬虫?用简单的点触验证码的方法来做也没法实现 平常的点触的方…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂
蛋白质结合剂(如抗体、抑制肽)在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上,高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术,但这类方法普遍面临资源消耗巨大、研发周期冗长…...
Java如何权衡是使用无序的数组还是有序的数组
在 Java 中,选择有序数组还是无序数组取决于具体场景的性能需求与操作特点。以下是关键权衡因素及决策指南: ⚖️ 核心权衡维度 维度有序数组无序数组查询性能二分查找 O(log n) ✅线性扫描 O(n) ❌插入/删除需移位维护顺序 O(n) ❌直接操作尾部 O(1) ✅内存开销与无序数组相…...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...

基于Flask实现的医疗保险欺诈识别监测模型
基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
Typeerror: cannot read properties of undefined (reading ‘XXX‘)
最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

Springboot社区养老保险系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...
Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?
在大数据处理领域,Hive 作为 Hadoop 生态中重要的数据仓库工具,其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式,很多开发者常常陷入选择困境。本文将从底…...