Linux ex命令(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Linux 系统中,命令行工具是开发者高效工作的核心。而 Linux ex命令 作为文本处理的“瑞士军刀”,常被低估却功能强大。它不仅是 vi/vim 编辑器的后台模式,更是批量操作文件、自动化任务的利器。无论是编程初学者还是中级开发者,掌握 ex 命令都能显著提升工作效率。本文将从基础到进阶,结合实例与比喻,帮助读者系统性地理解这一工具。


ex命令的起源与核心概念

什么是ex命令?

ex 是 Unix/Linux 系统 中最早的文本编辑器之一,诞生于 1976 年,其核心设计理念是“通过命令行高效操作文本”。尽管现代开发者更熟悉 vi/vim,但它们本质上是 ex 的图形化前端。当用户在 vi 中按下 Esc 键后输入冒号(:),便进入了 ex 的命令模式,此时输入的每一条命令都遵循 ex 的语法规范。

ex命令与vi/vim的关系

可以将 vi/vim 比作“驾驶舱”,而 ex 命令是“引擎”。例如,当我们在 vi 中输入 :wq 保存并退出时,实际上是在调用 ex 的 write(保存)和 quit(退出)命令。这种设计使得 ex 命令成为文本处理的底层逻辑,即使在非交互式脚本中也能直接调用。


ex命令的快速入门

如何进入ex模式?

  1. 直接启动ex编辑器:在终端输入 ex filename,直接进入 ex 的交互模式。
  2. 通过vi/vim切换:在 vi 的命令模式(按 Esc 键后)输入 :,即可进入 ex 的命令行模式。

示例:打开并编辑文件

$ ex example.txt  # 直接启动ex编辑example.txt

基础操作命令详解

1. 移动光标

  • :n:跳转到第 n 行。
  • :$:跳转到文件末尾。
  • :+/-n:向下/向上移动 n 行。

比喻:这如同在文档中“跳跃”,:10 就像按下电梯按钮直达10楼。

2. 查看与修改内容

  • :print(缩写 :p):显示当前行内容。
  • :s/old/new/:替换当前行中的第一个匹配项。
  • :s/old/new/g:全局替换当前行中的所有匹配项。

3. 删除与插入

  • :d:删除当前行。
  • :i:插入模式,输入新内容后按 Esc 并输入 . 退出。
  • :a:在当前行后追加内容。

代码示例

:10  # 跳转到第10行  
:p   # 查看该行内容  
:s/error/bug/  # 将"error"替换为"bug"  
:d   # 删除该行  

ex命令的进阶功能

全局搜索与替换

ex 支持正则表达式,可高效处理复杂文本。例如:

  • :g/pattern/command:对匹配 pattern 的行执行 command
  • :v/pattern/command:对不匹配 pattern 的行执行 command

案例:删除所有以 # 开头的注释行:

:g/^\s*#/d

文件操作与宏命令

1. 读取与写入文件

  • :r filename:将文件内容插入当前行后。
  • :w filename:将当前行或选中范围保存到文件。

2. 宏命令(Macro)

通过 :map:abbreviate 定义快捷指令,例如:

:map ,save :w! /path/to/file<CR>

输入 ,save 后会自动执行保存操作。


实战案例:ex命令的典型应用场景

案例1:批量替换字符串

需求:将 example.txt 中所有 TODO 标记替换为 FIXME,并删除空行。

:%s/TODO/FIXME/g  # 全局替换  
:g/^\s*$/d        # 删除空行  
:wq               # 保存并退出

案例2:处理日志文件

假设日志文件 log.txt 中需要提取 ERROR 级别的条目:

:g/ERROR/ .p      # 显示所有包含"ERROR"的行  
:.,+5w! grep ERROR > error.log  # 将当前行及后5行保存到error.log

案例3:脚本化ex命令

通过非交互式执行 ex 命令:

echo -e '%s/old/new/g\nwq' | ex file.txt

此命令将直接替换 file.txt 中所有 oldnew 并保存。


ex命令的注意事项

  1. 命令大小写敏感:大多数命令区分大小写,例如 :WQ 无效,需用 :wq
  2. 确认操作:删除或覆盖文件前,建议先备份或使用 :set nohidden 禁用隐藏功能。
  3. 正则表达式陷阱:特殊字符(如 . *)需用反斜杠 \ 转义。

结论

Linux ex命令 是开发者工具箱中不可或缺的“多面手”。它不仅简化了文本编辑的繁琐步骤,更能在自动化脚本中发挥关键作用。从基础的行操作到复杂的正则表达式处理,ex 命令的学习曲线虽有一定挑战,但其带来的效率提升远超预期。对于编程初学者,建议从 vi 的简单命令入手,逐步深入 ex 的高级功能;中级开发者则可尝试将其与 Shell 脚本结合,构建更强大的工作流。掌握 ex,便是掌握了 Linux 系统文本处理的底层逻辑,这将为后续学习更复杂的工具(如 sedawk)奠定坚实基础。

通过本文的讲解与案例,希望读者能真正理解 Linux ex命令 的价值,并在实际工作中灵活运用这一工具。

最新发布