当前位置: 首页 > news >正文

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匹配范围

    • 工作流程

      1. sed 逐行读取文件内容,每次读取一行数据。

      2. 将读取的每一行数据加载到一个临时的工作区域,称为 sed 模式空间,相当于在内存中创建了一个文本数据的副本,用于后续的处理操作。

      3. 根据用户指定的模式匹配规则,对模式空间中的数据进行处理。如果数据符合匹配条件,则执行相应的编辑操作,如替换内容、删除行等;不符合匹配条件的数据则保持不变,并直接输出到屏幕或其他指定的输出位置。

    • 示例 :假设要将文件中的某个单词替换为另一个单词,或者删除包含特定模式的行等,sed 都能高效地完成这些任务。

    • ifconfig 命令 :用于显示网络接口的 IP 地址信息等配置情况,与 sed 命令本身无直接关联,但在实际应用中,可能通过 sedifconfig 命令的输出结果进行进一步的处理和分析,例如提取特定的 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", varprint var 分别使用了不同的输出方式。

      • 在使用 printf 时,可以使用一些修饰符来进一步控制输出格式。如 - 用于指定左对齐,+ 用于强制显示数值的正负号等。

    • 模式:BEGIN和END

      • awk 中两种特殊的模式。

      • BEGIN 模式中的代码会在处理任何输入数据之前执行,通常用于初始化操作,如设置变量的初始值、定义输出格式等

      • END 模式中的代码则在所有输入数据处理完毕之后执行,常用于输出统计数据的汇总结果、执行清理操作等。

    • 正则语法 awk '/正则表达式/动作' 文件

      •  awk 支持使用正则表达式进行数据匹配和处理。通过在模式部分指定正则表达式,可以实现对符合条件的行进行特定的操作。例如,awk '/pattern/ {action}' filename 表示对文件 filename 中匹配 pattern 正则表达式的行执行相应的 action 操作。

http://www.xdnf.cn/news/763435.html

相关文章:

  • 【火山引擎 大模型批量推理数据教程---详细讲解一篇过!】
  • 哈希:闭散列的开放定址法
  • #14 【Kaggle】 Drawing with LLMs 金牌方案赏析
  • 简析PointNet++
  • leetcode0404. 左叶子之和-easy
  • 对选择基于模型编程(MBD)的工作对职业发展影响的讨论 (2025)
  • 【Bluedroid】蓝牙启动之 l2c_init 源码解析
  • 字符函数和字符串函数(1)
  • 上位机知识篇---直接无线数据通信
  • 线程与进程
  • 【Dv3Admin】系统视图用户管理API文件解析
  • Redis 架构设计
  • Kali Linux从入门到实战:系统详解与工具指南
  • Fréchet Inception Distance(FID)
  • ubuntu系统更换镜像源
  • [GESP202412 五级] 奇妙数字
  • java 多线程中的volatile关键字作用
  • 【JavaScript-Day 28】告别繁琐循环:`forEach`, `map`, `filter` 数组遍历三剑客详解
  • c++之循环
  • java CountDownLatch‌
  • 题海拾贝:压缩字符串
  • 详解鸿蒙开发如何上传三方库到ohpm仓库
  • 【Dv3Admin】系统视图系统配置API文件解析
  • 017搜索之深度优先DFS——算法备赛
  • java ExecutorService线程池使用(ExecutorService/Completable异步+ExecutorService线程池)
  • Office安装包2024版
  • ck-editor5的研究 (4):初步使用 CKEditor5 的插件功能
  • 72.编辑用户消息功能之前端实现
  • PCB制作入门
  • 开始通信之旅-----话题通信