Linux正则三剑客篇
一、历史命令
-
history
命令 :用于输出历史上使用过的命令行数量及具体命令。通过history
可以快速查看并回顾之前执行过的命令,方便重复操作或追溯执行过程。 -
!行号
:通过指定历史命令的行号来重新执行该行号对应的命令。例如,若history
显示第 5 行命令为ls -l
,则执行!5
将重新运行ls -l
命令。 -
!!
:用于重复执行上一次使用过的命令。这是一个便捷的方式,尤其在需要多次执行同一命令时,可提高工作效率。
二、Bash 特性
-
命令处理器 :Bash 是一种运行在文本窗口中的命令处理器,能够执行用户直接输入的命令,实现与系统的交互。
-
脚本支持 :Bash 可以从文件中读取 Linux 命令,这样的文件被称为脚本。通过编写脚本,可以实现命令的批量执行,自动化任务处理,提高工作效率。
-
功能支持 :Bash 支持多种功能,如通配符(用于模式匹配和文件操作)、管道(用于命令间的数据传递)、命令替换(将命令输出作为其他命令的输入)、条件判断(基于条件执行不同命令)等逻辑控制语句,为用户提供了强大的命令组合和处理能力。
三、快捷键
-
Ctrl + a
:将光标快速移动到当前行的行首位置,方便对命令行开头的内容进行修改或补充。 -
Ctrl + e
:将光标快速移动到当前行的行尾位置,便于在命令行末尾继续输入或编辑内容。 -
Ctrl + u
:用于删除光标之前的所有字符,快速清空当前光标前面的内容,适合在输入错误或需要大幅修改命令时使用。 -
Ctrl + k
:用于删除光标之后的所有字符,能够迅速截断光标后面的内容,方便重新输入或调整命令的后半部分。 -
Ctrl + l
:清空屏幕终端内容,与clear
命令功能相同,可使终端界面保持整洁,便于查看新的输出信息。
四、命令补全
-
Tab
键 :在输入命令时,可通过按下Tab
键来自动补全命令。Bash 会根据$PATH
环境变量中配置的目录路径,查找并匹配可能的命令名称,若唯一匹配则自动补全,若存在多个匹配项则提示用户进行选择,这样可减少命令输入量,提高命令行操作的效率,避免因拼写错误导致的命令无法识别等问题。
五、Linux 正则表达式
-
定义与工具 :正则表达式(Regular Expression,Reg Exp)是一种由特殊字符及文本字符组成的模式,用于描述和匹配字符串。它是强大的文本处理工具,广泛应用于 Linux 系统中的文本处理任务。
-
分类 :正则表达式主要分为两类,基本正则表达式(BRE,Basic Regular Expression)和扩展正则表达式(ERE,Extended Regular Expression)。
-
基本正则表达式BRE集合: 匹配字符、匹配次数、位置锚定。
-
ERE 在 BRE 的基础上增加了更多的特殊字符和功能,提供了更强大的匹配能力。
-
-
意义与应用场景 :正则表达式的意义在于高效处理大量的字符串和文本内容。在 Linux 运维工作中,常常需要处理各种带有字符串内容的文件,如配置文件、程序代码、命令输出结果、日志文件等。通过正则表达式,管理员可以快速准确地过滤、替换和处理所需的特定字符串,从而提高工作效率,完成诸如查找特定日志条目、修改配置参数、提取代码片段等任务。
-
支持工具 :在 Linux 下,正则表达式主要受到三剑客(sed、awk、grep)的支持,其他普通命令通常无法直接使用正则表达式。通配符虽然在大部分普通命令中都支持,但主要用于查找文件或目录,而正则表达式则侧重于在文件内容或数据流中进行复杂的过滤和处理。
六、Linux 三剑客
-
grep 命令
-
作用 :作为文本过滤工具,
grep
可在文件或文本数据流中查找与指定模式(pattern)匹配的内容,并输出匹配的行。这在需要从大量文本中筛选出符合特定条件的信息时非常有用,例如在日志文件中查找包含特定关键词的错误记录、从配置文件中提取相关设置等。 -
扩展正则表达式ERE集合:
-
使用grep命令只能使用基本正则表达式BRE。
-
需要使用扩展正则表达式ERE,必须使用grep -E才能生效。
-
-
格式 :
grep '查找的内容' 查找的目录/文件。
-
其中
'查找的内容'
是要匹配的模式,可以是简单的字符串,也可以包含正则表达式的特殊字符;后面跟要查找的文件或目录路径。
-
-
选项
-
-n
:在输出匹配的行时,同时显示该行在文件中的行号,便于定位信息所在的物理位置。 -
-i
:忽略匹配时的大小写差异,使查找更加灵活,不会因大小写不一致而遗漏潜在的匹配项。
-
-
实例
-
将
/etc/passwd
文件内容复制到/tmp/test_grep.txt
文件中,以便进行测试操作:cat /etc/passwd > /tmp/test_grep.txt
。 -
查找并输出
/tmp/test_grep.txt
文件中包含 "login" 的行,并显示行号:grep "login" /tmp/test_grep.txt -n
。 -
查找并输出
/tmp/test_grep.txt
文件中不包含 "login" 的行,同时显示行号:grep "login" /tmp/test_grep.txt -n -v
。这里-v
选项用于反转匹配结果,即输出不匹配的行。 -
忽略大小写,查找并输出
/tmp/test_grep.txt
文件中包含 "root" 的行:grep "ROOT" /tmp/test_grep.txt -i
。 -
使用扩展正则表达式,同时过滤出
/tmp/test_grep.txt
文件中包含 "root" 或 "sync" 的行,并以彩色高亮显示匹配部分:grep -E "root|sync" /tmp/test_grep.txt --color=auto
。-E
选项用于启用扩展正则表达式的语法,|
表示逻辑或的关系,匹配任意一个模式。 -
查找并输出
/tmp/test_grep.txt
文件中包含 "login" 的行,并统计匹配结果的行数:grep "login" /tmp/test_grep.txt | wc -l
。 -
查找并输出
/tmp/test_grep.txt
文件中包含 "login" 的行,仅显示匹配的内容部分:grep "login" /tmp/test_grep.txt -o
。 -
查找并输出
/tmp/test_grep.txt
文件中完整匹配 "oldboy" 这个单词的行:grep "oldboy" /tmp/test_grep.txt -w
。这里-w
选项用于指定完整单词匹配,确保匹配的是独立的单词 "oldboy",而不是包含在其他字符串中的子串。 -
过滤掉
/tmp/test_grep.txt
文件中的空白行和注释行:grep -E "^#|^$" /tmp/test_grep.txt -v
。^#
匹配以#
开头的注释行,^$
匹配空行,-v
选项用于排除这些行,输出非空白行和非注释行的内容。
-
-
注意事项 :在 Linux 平台下,文件的结尾确实可能存在不可见的特殊字符,如
$
符。可以使用cat -A
命令查看文件内容,包括这些特殊字符,以便更好地理解和处理文件格式相关的问题。
-
-
sed 命令
-
作用 :
sed
是一个流编辑器,用于对文本或数据流进行处理,包括编辑、过滤和转换文本内容。它能够按照用户指定的规则对文本进行操作,并将处理后的结果输出到标准输出设备(如屏幕),或者重定向到文件中。 -
格式 :
sed sed内置命令字符 输入的文件名称
。-
其中,sed内置命令字符用于指定具体的操作指令,如替换、删除、插入等;后面跟要处理的文件名称。
-
sed参数选项
-
sed匹配范围
-
-
工作流程
-
sed
逐行读取文件内容,每次读取一行数据。 -
将读取的每一行数据加载到一个临时的工作区域,称为
sed
模式空间,相当于在内存中创建了一个文本数据的副本,用于后续的处理操作。 -
根据用户指定的模式匹配规则,对模式空间中的数据进行处理。如果数据符合匹配条件,则执行相应的编辑操作,如替换内容、删除行等;不符合匹配条件的数据则保持不变,并直接输出到屏幕或其他指定的输出位置。
-
-
示例 :假设要将文件中的某个单词替换为另一个单词,或者删除包含特定模式的行等,
sed
都能高效地完成这些任务。 -
ifconfig 命令 :用于显示网络接口的 IP 地址信息等配置情况,与
sed
命令本身无直接关联,但在实际应用中,可能通过sed
对ifconfig
命令的输出结果进行进一步的处理和分析,例如提取特定的 IP 地址信息等。
-
-
awk 命令
-
作用 :
awk
是 Linux 下强大的文本报告生成器,擅长对文本数据进行格式化处理,能够将数据整理成类似专业表格的样式,便于阅读和分析。它广泛应用于数据处理、统计分析、文本转换等场景。 -
格式 :
awk awk可选参数 '条件动作' 文件/数据
。-
其中,
awk可选参数
用于指定一些控制选项;'条件动作'
是awk
程序的核心部分,定义了数据处理的逻辑和操作;最后指定要处理的文件或数据来源。
-
-
运行特点
-
awk
按行处理文件内容,逐行读取并进行分析和操作。 -
它可以根据用户指定的分隔符来分割每一行的数据,默认情况下以空格作为分隔符,并且会将连续的多个空格视为一个分隔符来处理,这样可以方便地提取出字段数据。
-
例如,
awk 'NR==5{print $1}' filename
表示处理文件filename
的第 5 行,并输出该行的第一个字段。 -
如果需要一次性输出多个字段,并且希望以逗号(
,
)作为字段之间的分隔符,则可以通过设置输出分隔符来实现。
-
-
变量
-
内置变量 :
awk
提供了多种内置变量用于获取和操作数据。-
NR
表示当前处理的行号。 -
$1
表示第一个字段。 -
$0
表示整行内容。 -
$2
表示第二个字段。 -
$NF
表示当前行的最后一个字段。 -
(NF-1)
可用于引用倒数第二个字段。 -
FS
表示输入分隔符,用于指定数据行中各个字段之间的分隔字符。 -
OFS
表示输出分隔符,用于指定输出数据时各字段之间的分隔字符。 -
RS
表示输入换行符,默认为回车键,用于定义每行数据的结束标志。 -
ORS
表示输出换行符,默认为回车键,用于指定输出每行数据后的换行方式。 -
ARGV
是一个数组,用于保存命令行传递给awk
程序的参数,其中ARGV[0]
是awk
命令本身,后续元素依次为各个输入文件名等参数。 -
ARGC的数组是一种数据类型,如下图为一个盒子,盒子有它的名字,且内部有N个小格子,标号从O开始给一个盒子起名字叫做months,月份是1~12。
-
-
自定义变量 :用户可以在
awk
程序中定义自己的变量,用于存储和处理数据。-
定义方式有两种:
-
一是在命令行中使用
-v varName=value
的形式为变量赋初值。 -
二是在
awk
程序的代码块中直接进行变量赋值操作。
-
-
-
-
动作:printf和pintf
-
awk
中两种常用的输出操作。 -
printf
需要用户指定输出格式,通过格式说明符(如%d
、%s
、%f
等)来控制每个数据项的输出样式,且不会自动添加换行符,需要手动在格式字符串中指定\n
来换行. -
而
print
命令则会自动在输出内容后添加空格和换行符,默认以空格分隔各输出项,并在每项输出后换行。 -
例如,
printf "Value: %d\n", var
和print var
分别使用了不同的输出方式。 -
在使用
printf
时,可以使用一些修饰符来进一步控制输出格式。如-
用于指定左对齐,+
用于强制显示数值的正负号等。
-
-
模式:BEGIN和END
-
awk
中两种特殊的模式。 -
BEGIN
模式中的代码会在处理任何输入数据之前执行,通常用于初始化操作,如设置变量的初始值、定义输出格式等 -
END
模式中的代码则在所有输入数据处理完毕之后执行,常用于输出统计数据的汇总结果、执行清理操作等。
-
-
正则语法 : awk '/正则表达式/动作' 文件
-
awk
支持使用正则表达式进行数据匹配和处理。通过在模式部分指定正则表达式,可以实现对符合条件的行进行特定的操作。例如,awk '/pattern/ {action}' filename
表示对文件filename
中匹配pattern
正则表达式的行执行相应的action
操作。
-
-
相关文章:

Linux正则三剑客篇
一、历史命令 history 命令 :用于输出历史上使用过的命令行数量及具体命令。通过 history 可以快速查看并回顾之前执行过的命令,方便重复操作或追溯执行过程。 !行号 :通过指定历史命令的行号来重新执行该行号对应的命令。例如,若…...
HTML5 视频播放器:从基础到进阶的实现指南
在现代Web开发中,视频播放功能是许多网站的重要组成部分。无论是在线教育平台、视频分享网站,还是企业官网,HTML5视频播放器都扮演着不可或缺的角色。本文将从基础到进阶,详细介绍如何实现一个功能完善的HTML5视频播放器ÿ…...
鸿蒙HarmonyOS (React Native)的实战教程
一、环境配置 安装鸿蒙专属模板 bashCopy Code npx react-native0.72.5 init HarmonyApp --template react-native-template-harmony:ml-citation{ref"4,6" data"citationList"} 配置 ArkTS 模块路径 在 entry/src/main/ets 目录下创建原生模块&…...
函数栈帧深度解析:从寄存器操作看函数调用机制
文章目录 一、程序运行的 "舞台":内存栈区与核心寄存器二、寄存器在函数调用中的核心作用三、函数调用全流程解析:以 main 调用 func 为例阶段 1:main 函数栈帧初始化**阶段 2:参数压栈(右→左顺序&#x…...

【计算机网络】第3章:传输层—可靠数据传输的原理
目录 一、PPT 二、总结 (一)可靠数据传输原理 关键机制 1. 序号机制 (Sequence Numbers) 2. 确认机制 (Acknowledgements - ACKs) 3. 重传机制 (Retransmission) 4. 校验和 (Checksum) 5. 流量控制 (Flow Control) 协议实现的核心:滑…...
rv1126b sdk移植
DDR rkbin bin/rv11/rv1126bp_ddr_v1.00.bin v1.00 板子2 reboot异常 [ 90.334976] reboot:Restarting system DDR 950804cb85 wesley.yao 25/04/02-15:54:40,fwver: v1.00In Derate1 tREFI1x SR93 PD13 R ddrconf 4 rgef0 rgcsb0 1 ERR: Read gate CS0 err error ERR …...
第6节 Node.js 回调函数
Node.js 异步编程的直接体现就是回调。 异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。 回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。 例如,我们可以一边读取文…...

OpenCV CUDA模块直方图计算------在 GPU上执行直方图均衡化(Histogram Equalization)函数equalizeHist
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::equalizeHist 用于增强图像的对比度,通过将图像的灰度直方图重新分布,使得图像整体对比度更加明显。 这在医学…...

构建系统maven
1 前言 说真的,我是真的不想看构建了,因为真的太多了。又多又乱。Maven、Gradle、Make、CMake、Meson、Ninja,Android BP。。。感觉学不完,根本学不完。。。 但是没办法最近又要用一下Maven,所以咬着牙再简单整理一下…...

day13 leetcode-hot100-23(链表2)
206. 反转链表 - 力扣(LeetCode) 1.迭代 思路 这个题目很简单,最主要的就是了解链表的数据结构。 链表由多个节点构成,每个节点包括值与指针,其中指针指向下一个节点(单链表)。 方法就是将指…...
Java面试八股(Java基础,Spring,SpringBoot篇)
java基础 JDK,JRE,JVMJava语言的特点Java常见的运行时异常Java为什么要封装自增自减的隐式转换移位运算符1. 左移运算符(<<)2. 带符号右移运算符(>>)3. 无符号右移运算符(>>>) 可变…...
Python编程基础(二)| 列表简介
引言:很久没有写 Python 了,有一点生疏。这是学习《Python 编程:从入门到实践(第3版)》的课后练习记录,主要目的是快速回顾基础知识。 练习1: 姓名 将一些朋友的姓名存储在一个列表中…...
支持向量机(SVM):解锁数据分类与回归的强大工具
在机器学习的世界中,支持向量机(Support Vector Machine,简称 SVM)一直以其强大的分类和回归能力而备受关注。本文将深入探讨 SVM 的核心功能,以及它如何在各种实际问题中发挥作用。 一、SVM 是什么? 支持…...

代谢组数据分析(二十五):代谢组与蛋白质组数据分析的异同
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍蛋白质组定义与基因的关系蛋白质组学(Proteomics)检测技术蛋白质的鉴定与定量分析蛋白质“鉴定”怎么做蛋白质“定量”怎么做蛋白质鉴定与定量对比应用领域代谢组定义代谢组学(M…...

002 flutter基础 初始文件讲解(1)
在学习flutter的时候,要有“万物皆widget”的思想,这样有利于你的学习,话不多说,开始今天的学习 1.创建文件 进入trae后,按住ctrlshiftP,输入Flutter:New Project,回车,…...
AI 让无人机跟踪更精准——从视觉感知到智能预测
AI 让无人机跟踪更精准——从视觉感知到智能预测 无人机跟踪技术正在经历一场前所未有的变革。曾经,我们只能依靠 GPS 或简单的视觉识别来跟踪无人机,但如今,人工智能(AI)结合深度学习和高级视觉算法,正让无人机的跟踪变得更加智能化、精准化。 尤其是在自动驾驶、安防监…...

Launcher3体系化之路
👋 欢迎来到Launcher 3 背景 车企对于桌面的排版布局好像没有手机那般复杂,但也有一定的需求。部分场景下,要考虑的上下文比手机要多一些,比如有如下的一些场景: 手车互联。HiCar,CarPlay,An…...

用wireshark抓了个TCP通讯的包
昨儿个整理了下怎么用wireshark抓包,链接在这里:捋捋wireshark 今天打算抓个TCP通讯的包试试,整体来说比较有收获,给大家汇报一下。 首先就是如何搞到可以用来演示TCP通讯的客户端、服务端,问了下deepseek,…...

VR/AR 显示瓶颈将破!铁电液晶技术迎来关键突破
在 VR/AR 设备逐渐走进大众生活的今天,显示效果却始终是制约其发展的一大痛点。纱窗效应、画面拖影、眩晕感…… 传统液晶技术的瓶颈让用户体验大打折扣。不过,随着铁电液晶技术的重大突破,这一局面有望得到彻底改变。 一、传统液晶技术瓶颈…...
【前端】Vue中实现pdf逐页转图片,图片再逐张提取文字
给定场景:后端无法实现pdf转文字,由前端实现“pdf先转图片再转文字”。 方法: 假设我们在< template>中有一个元素存放我们处理过的canvas集合 <div id"canvasIDpdfs" />我们给定一个按钮,编写click函数&…...
焦虑而烦躁的上午
半年了,每逢周末或者节假日都被催着去医院。 今天早上依旧,还在睡梦之中,就被喊醒“赶紧得,抢上儿童医院的票了!” 无奈,从床上爬起来,草草用过早餐之后,奔赴儿童医院!…...

Python使用
Python学习,从安装,到简单应用 前言 Python作为胶水语言在web开发,数据分析,网络爬虫等方向有着广泛的应用 一、Python入门 相关基础语法直接使用相关测试代码 Python编译器版本使用3以后,安装参考其他教程…...

分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类
分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类 目录 分类预测 | Matlab实现CNN-LSTM-Attention高光谱数据分类分类效果功能概述程序设计参考资料 分类效果 功能概述 代码功能 该MATLAB代码实现了一个结合CNN、LSTM和注意力机制的高光谱数据分类模型,核心…...

【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.
目录 一、长时间显示:Task is queued 二、GraphRAG消耗大量Token 三、error: Microsoft Visual C 14.0 or greater is required. Get it with “Microsoft C Build Tools“ 四、ModuleNotFoundError: No module named infinity.common; infinity is not a package 五…...

爬虫到智能数据分析:Bright Data × Kimi 智能洞察亚马逊电商产品销售潜力
前言 电商数据分析在现代商业中具有重要的战略价值,通过对消费者行为、销售趋势、商品价格、库存等数据的深入分析,企业能够获得对市场动态的精准洞察,优化运营决策,预测市场趋势、优化广告投放、提升供应链效率,并通…...

高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享
目录 高级前端工程师必备的 JS 设计模式入门教程,常用设计模式案例分享 一、什么是设计模式?为什么前端也要学? 1、设计模式是什么 2、设计模式的产出 二、设计模式在 JS 里的分类 三、常用设计模式实战讲解 1、单例模式(S…...
unix/linux source 命令,其发展历程详细时间线、由来、历史背景
追本溯源,探究技术的历史背景和发展脉络,能够帮助我们更深刻地理解其设计哲学和存在的意义。source 命令(或者说它的前身和等效形式)的历史,与 Unix Shell 本身的发展紧密相连。 让我们一起踏上这段追溯之旅,探索 source 命令的由来和发展历程。 早期 Unix Shell 与命令…...

2023年电赛C题——电感电容测量装置
一、赛题 二、题目分析——损耗角正切值 对于一个正常的正弦波信号,如果通过的是一个电阻或一条导线,那么它的电流信号和电压信号是一致的(有电压才有电流),没有相位差。 但是如果正弦波经过了一个电感或电容…...

pycharm打印时不换行,方便对比观察
原来: 优化: import torch torch.set_printoptions(linewidth200) 优化结果:...

因泰立科技:镭眸T51激光雷达,打造智能门控新生态
在高端门控行业,安全与效率是永恒的追求。如今,随着科技的飞速发展,激光雷达与TOF相机技术的融合,为门控系统带来了前所未有的智能感知能力,开启了精准守护的新时代。因泰立科技的镭眸T51激光雷达,作为这一…...