Linux之三剑客(grep、sed、awk)

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。

推荐:Linux运维老纪的首页,持续学习,不断总结,共同进步,活到老学到老
导航剑指大厂系列:全面总结 运维核心技术:系统基础、数据库、网路技术、系统安全、自动化运维、容器技术、监控工具、脚本编程、云服务等。
常用运维工具系列:常用的运维开发工具, zabbix、nagios、docker、k8s、puppet、ansible等
数据库系列:详细总结了常用数据库 mysql、Redis、MongoDB、oracle 技术点,以及工作中遇到的 mysql 问题等
懒人运维系列:总结好用的命令,解放双手不香吗?能用一个命令完成绝不用两个操作
数据结构与算法系列:总结数据结构和算法,不同类型针对性训练,提升编程思维,剑指大厂
非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

目录

一、三剑客简介

二、正则表达式

三、grep

四、awk

一、简介

Linux三剑客(grep、sed、awk)

Linux中的三个命令awk、sed、grep在业界被称为“三剑客”,grep擅长查找,sed擅长取行和替换,awk擅长运算。

  我们现在知道Linux下一切皆文件,对Linux的操作就是对文件的处理,那么怎么能更好的处理文件呢?这就要用到我们上面的三剑客命令。

 在说这三个命令前我们要插入一个小插曲就是“正则表达式”。

二、正则表达式

    所谓的正则表达式我个人理解就是正规的表示方法。他是用简单的方法来实现强大的功能,所以深受计算机爱好者的使用。

    三剑客与正则表达式是什么关系呢?

    我们可以这样理解,三剑客就是普通的命令,有的把他们叫做工具,在我看来都一样。而正则表达式就好比一个模版。三剑客能读懂这个模版。就这么简单。注意只有三剑客才能读懂这个模版哦!

    现在他们的关系和功能都搞懂了,接下来我们就来认识下他们怎么结合的。正则表达式是一个模版,这个模版是由一些普通字符和一些元字符组成。普通字符包括大小写的字母和数字,而元字符则具有特殊的含义。具体如下

元字符

功能

意思

^

匹配行首

表示以某个字符开头

$

匹配行尾

表示以某个字符结尾

 ^$

空行的意思

表示空行的意思

匹配任意单个字符

表示任意一个字符

*

字符*   匹配0或多个此字符

表示重复的任意多个字符

 \

屏蔽一个元字符的特殊含义

表示去掉有意义的元字符的含义

[]

匹配中括号内的字符

表示过滤括号内的字符

.*

代表任意多个字符

就是代表任意多个字符

lele\{n\}

用来匹配前面lele出现次数。n为次数

就是统计前面lele出现的次数

lele\{n,\}

含义同上,但次数最少为n

从功能就可以看出

lele\{n,m\}

义同上,但lele出现次数在n与m之间

从功能也可以看出

lele\{n,m\}

义同上,但lele出现次数在n与m之间

从功能也可以看出

三剑客的功能非常强大,但我们只需要掌握他们分别擅长的领域即可:grep擅长查找功能,sed擅长取行和替换。awk擅长取列。

三、grep
文本过滤(模式:pattern)工具,grep, egrep
grep [OPTIONS] PATTERN [FILE...]
--color=auto 对匹配到的文本着色显示
-v 显示不被pattern匹配到的行
-i 忽略字符大小写
-n 显示匹配的行号
-c 统计匹配的行数
-o 仅显示匹配到的字符串
-q 静默模式,不输出任何信息
-A # after, 后#行
-B # before, 前#行
-C # context, 前后各#行
-e 实现多个选项间的逻辑or关系
grep –e ‘cat ’ -e ‘dog’ file
-w 匹配整个单词
-E 使用ERE,相当于egrep
-F 相当于fgrep,不支持正则表达式
举例子:
1、查找文件内容包含root的行数
2、查找文件内容不包含root的行
3、查找以s开头的行
4、查找以n结尾的行
三、sed
sed是一种流编辑器,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’ 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
sed [option]... 'script' inputfile
选项
-n 不输出模式空间内容到屏幕,即不自动打印
-e 多点编辑
-f /PATH/SCRIPT_FILE: 从指定文件中读取编辑脚本
-r 支持使用扩展正则表达式
-i 直接编辑文件
-i.bak 备份文件并原处编辑
script 地址定界
不给地址:对全文进行处理
单地址:
#: 指定的行,$:最后一行
/pattern/:被此处模式所能够匹配到的每一行
地址范围:
#,#
#,+#
/pat1/,/pat2/
`#,/pat1/
~:步进
1~2 奇数行
2~2 偶数行
编辑命令:
d 删除模式空间匹配的行,并立即启用下一轮循环
p 打印当前模式空间内容,追加到默认输出之后
a [\]text1 在指定行后面追加文本,支持使用\n实现多行追加
i [\]text 在行前面插入文本
c [\]text 替换行为单行或多行文本
w /path/somefile 保存模式匹配的行至指定文件
r /path/somefile 读取指定文件的文本至模式空间中匹配到的行后
= 为模式空间中的行打印行号
! 模式空间中匹配行取反处理
s///:查找替换,支持使用其它分隔符,s@@@,s###
替换标记:
g 行内全局替换
p 显示替换成功的行
w /PATH/TO/SOMEFILE 将替换成功的行保存至文件中
举例子:
1、打印出文件第二行
2、打印出2-5行的内容
3、将文件中的root全部替换为abc
直接修改读取的文件内容,而不是输出到终端。
s :取代,可以直接进行取代的工作。
g: 是全局的意思。其中#是格式符,他也可以是@或者别的/。
Sed替换格式是:sed -i ‘s/要替换的内容/替换成的内容/g' 文件名。
四、awk
报告生成器,格式化文本输出,有多种版本:New awk(nawk),GNU awk( gawk)
awk [options] 'program' file…
program:pattern{action statements;..}
pattern部分决定动作语句何时触发及触发事件
BEGIN,END
action statements对数据进行处理,放在{}内指明
print, printf
选项:
-F 指明输入时用到的字段分隔符
-v var=value 自定义变量
分割符、域和记录
awk执行时,由分隔符分隔的字段(域)标记1,1,2..n称为域标识,n称为域标识,0为所有域。
省略action,则默认执行 print $0 的操作。
变量
FS:输入字段分隔符;OFS:输出字段分隔符;RS:输入记录分隔符;ORS:输出记录分隔符;NF:字段数量;NR:记录号;NFR:各文件分别计数,记录号。FILENAME:当前文件名;ARGC:命令行的参数;ARGV:数组,保存的是命令行所给定的各参数。
注意:以上都是内置变量,在引用时不需要前面加$,每新建一个变量,都需要加个-v,与变量名之间有无空格都可以,变量可以在引用之后再声明,但那一行的输出会输出空行。
printf命令
printf “FORMAT” , item1, item2, ... 不会自动换行,FORMAT中需要分别为后面每个item指定格式符。
格式符
格式符 item表现形式
%c 显示字符的ASCII码
%d, %i 显示十进制整数
%e, %E 显示科学计数法数值
%f 显示为浮点数
%g, %G 以科学计数法或浮点形式显示数值
%s 显示字符串
%u 无符号整数
%% 显示%自身
修饰符
格式符 item表现形式
#[.#] 第一个数字控制显示的宽度;第二个#表示小数点后精度,%3.1f
- 左对齐(默认右对齐) %-15s
+ 显示数值的正负符号 %+d
操作符
算术操作符:x+y, x-y, x*y, x/y, x^y, x%y
-x: 转换为负数
+x: 转换为数值
比较操作符:==, !=, >, >=, <, <=
模式匹配符:~:左边是否和右边匹配包含 !~:是否不匹配
逻辑操作符:与&&,或||,非!
函数调用:function_name(argu1, argu2, ...)
条件表达式(三目表达式):selector?if-true-expression:if-false-expression
PATTERN:根据pattern条件,过滤匹配的行,再做处理
如果未指定:空模式,匹配每一行
/regular expression/:仅处理能够模式匹配到的行,需要用/ /括起来
relational expression: 关系表达式,结果为“真”才会被处理
line ranges:行范围 startline,endline:/pat1/,/pat2/不支持直接给出数字格式
BEGIN/END模式
awk控制语句
{ statements;… } 组合语句
if(condition) {statements;…}
if(condition) {statements;…} else {statements;…}
while(conditon) {statments;…}
do {statements;…} while(condition)
for(expr1;expr2;expr3) {statements;…}
break
continue
delete array[index]
delete array
exit
awk [-F|-v] '行数筛选{XXX;XXX;printf “”,XXX,XXX}'
举例子:
1、打印文件第一列:
这里的分隔符是冒号 ,然后print打印第一列
2、输出字段1,3,6,以制表符作为分隔符

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

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

相关文章

LeetCode热题100刷题8:54. 螺旋矩阵、73. 矩阵置零、48. 旋转图像

54. 螺旋矩阵 class Solution { public:vector<int> spiralOrder(vector<vector<int>>& matrix) {vector<int> vec;if(matrix.empty())return vec;int left0;int right matrix[0].size()-1;int up0;int down matrix.size()-1;while(true) {for(i…

探索 WebKit 的网络脉络:深入网络栈的设计艺术

探索 WebKit 的网络脉络&#xff1a;深入网络栈的设计艺术 在当今这个以网页为中心的时代&#xff0c;WebKit 作为众多流行浏览器的心脏&#xff0c;其网络栈的设计对于网页内容的加载、处理和渲染起着至关重要的作用。本文将深入探讨 WebKit 网络栈的架构和设计&#xff0c;揭…

Nuxt:父子组件传值

在Nuxt中&#xff0c;父子组件间的数据传递数据有两种方法&#xff0c;如下 1、 props 父组件通过props将数据传递给子组件&#xff0c;子组件通过props接收数据。代码如下&#xff1a; <template><div><ChildLeft :msg"msg"></ChildLeft>…

代码随想录-DAY④-相交链表经典三解——leetcode 160

解法一&#xff1a;哈希集合 思路 将链表 A 中的每个节点都存入哈希集合&#xff0c; 遍历链表 B 并判断每一个节点&#xff0c; 如果发现已存在在哈希集合中的&#xff0c;说明相交&#xff0c; 如果遍历结束&#xff0c;说明不相交。 时间复杂度&#xff1a;O(mn) 空间…

CentOS 6.5 配置国内在线yum源和制作openssh 9.8p1 rpm包 —— 筑梦之路

CentOS 6.5比较古老的版本了&#xff0c;而还是有一些古老的项目仍然在使用。 环境说明 1. 更换国内在线yum源 CentOS 6 在线可用yum源配置——筑梦之路_centos6可用yum源-CSDN博客 cat > CentOS-163.repo << EOF [base] nameCentOS-$releasever - Base - 163.com …

C组暑假第一次训练题解

A.寄包柜 题意 两种操作 1.在第i个柜子第j个格子输入 2.输出第i个柜子第j个格子的数字 分析 因为i和j最大为1e5&#xff0c;使用二维数组会爆空间&#xff0c;使用map即可解决 代码 #include<iostream> #include<algorithm> #include<cstring> #incl…

Java中线程的常用方法(并发编程基础)

Java中线程的常用方法 sleep 调用sleep会让当前线程从Running进入TIMED WAITING状态其它线程可以使用 interrupt 方法打断正在睡眠的线程,这时sleep方法会抛出InterruptedException睡眠结束后的线程未必会立刻得到执行建议用TimeUnit的sleep代替Thread的sleep来获得更好的可读…

均匀采样信号的鲁棒Savistky-Golay滤波(MATLAB)

S-G滤波器又称S-G卷积平滑器&#xff0c;它是一种特殊的低通滤波器&#xff0c;用来平滑噪声数据。该滤波器被广泛地运用于信号去噪&#xff0c;采用在时域内基于多项式最小二乘法及窗口移动实现最佳拟合的方法。与通常的滤波器要经过时域&#xff0d;频域&#xff0d;时域变换…

掌握 IPython:灵活运用系统环境变量

掌握 IPython&#xff1a;灵活运用系统环境变量 在数据科学和编程的广阔天地中&#xff0c;IPython 以其强大的交互式功能成为了探索和实验的利器。但你知道吗&#xff1f;IPython 同样能够与系统环境变量进行交互&#xff0c;这使得我们能够更灵活地控制我们的代码和环境。本…

ubuntu22 使用ufw防火墙

专栏总目录 一、安装 sudo apt update sudo apt install ufw 二、启动防火墙 &#xff08;一&#xff09;启动命令 sudo ufw enable &#xff08;二&#xff09;重启命令 sudo ufw reload 三、配置规则 #允许SSH连接 sudo ufw allow ssh #如果sshd服务端口指定到了8888&a…

Oracle PL / SQL 插入insert

INSERT是SQL的数据操作语言的一部分的SQL关键字之一。 DML可以操作关系数据库中的数据。 让我们从INSERT语句的第一种形式开始&#xff0c;INSERT ... VALUES。 INSERT ... VALUES 以下代码显示如何使用DML的INSERT VALUES子语句。 INSERT INTO authors ( id, name, birth_d…

RedHat运维-LinuxSELinux基础2-文件绑定SELinux上下文

1. 所有资源&#xff0c;比如进程、文件和________&#xff0c;都被打上了SELinux上下文&#xff1b; 2. 所有资源&#xff0c;比如进程、文件和________&#xff0c;都被打上了SELinux上下文&#xff1b; 3. 所有资源&#xff0c;比如进程、文件和________&#xff0c;都被打上…

HTML5使用<blockquote>标签:段落缩进

使用<blockquote>标签可以实现页面文字的段落缩进。这一标签也是每使用一次&#xff0c;段落就缩进一次&#xff0c;并且可以嵌套使用&#xff0c;以达到不同的缩进效果。语法如下&#xff1a; <blockquote>文字</blockquote> 【实例】使用<blockquote&…

常用 Android 反编译工具apktooldex2jarenjarifyjd-guijadx

apktool 官网地址 : https://ibotpeaches.github.io/Apktool/ 反编译命令 : java -jar apktool.jar d demo.apk -o demoapktool d app.apk -r --only-main-classes -o destDird 表示反编译 app.apk 是目标apk文件路径 -r 表示不反编译资源文件 –only-main-classes 表示不反…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十一)-git(3)

Git是目前最流行的版本控制系统之一&#xff0c;在现代软件开发中扮演着重要的角色。它能够有效地跟踪文件变化、协作开发&#xff0c;并存储项目的历史记录。本文的目的是向读者介绍Git的基本概念和工作原理&#xff0c;帮助初学者快速上手使用Git&#xff0c;并帮助有经验的开…

[目标检测]labelme标注数据转yoloV8需要的.txt格式

1、首先需要知道yoloV8目标检测的标签格式&#xff1a; yolov8标签数据格式说明 After using a tool like Roboflow Annotate to label your images, export your labels to YOLO format, with one *.txt file per image (if no objects in image, no *.txt file is required).…

Java.lang.Thread类和Java的主线程

一.Java.lang.Thread类 支持多线程编程 常用方法 二.主线程 ◆Java程序启动时&#xff0c;一个线程立即随之启动&#xff0c;通常称之为程序的主线程 ◆main()方法即为主线程入口 ◆产生其他子线程的线程 ◆必须最后完成执行&#xff0c;因为它执行各种关闭动作 示例 使用…

0-1背包、完全背包算法模板从递归到记忆化搜索到动态规划

0-1背包、完全背包算法模板从递归到记忆化搜索到动态规划 不管是0-1背包还是完全背包&#xff0c;我们都可以将问题转换成为选择或者不选的问题&#xff0c;这个问题在前面的回溯算法模板是一样的。 举个栗子&#xff1a; 假如有1、4、5这三个数&#xff0c;问组成和为12的数需…

202406 CCF-GESP Python 五级试题及详细答案注释

202406 CCF-GESP Python 五级试题及详细答案注释1 单选题(每题 2 分,共 30 分) 第 1 题 在Python中,print((c for c in "GESP"))的输出是( )。 A. (G, E, S, P) B. [G, E, S, P] C. {G, E, S, P} D. 以上选项均不正确答案:D解析:在Python中,(c for c in&q…

Keras实战之图像分类识别

文章目录 整体流程数据加载与预处理搭建网络模型优化网络模型学习率Drop-out操作权重初始化方法对比正则化加载模型进行测试 实战&#xff1a;利用Keras框架搭建神经网络模型实现基本图像分类识别&#xff0c;使用自己的数据集进行训练测试。 问&#xff1a;为什么选择Keras&am…