Linux Shell 文本编辑利器:sed 流编辑器从入门到精通
在 Linux 处理文本的工具里,sed(Stream Editor,流编辑器)是个“轻量又利索”的主力。
共 18 篇
在 Linux 处理文本的工具里,sed(Stream Editor,流编辑器)是个“轻量又利索”的主力。
在 Linux 里搞文本处理,「正则表达式」是绕不开的核心工具——它不是一个具体命令,而是一套 自定义文本匹配模板 ,能让 sed、gawk、grep 这些工具精准地「筛」出或「定位」数据流里的内容。
在 Linux 里处理文本,sed 这个流编辑器擅长快速改字符、替换内容,但碰到「提取结构化数据、生成格式化报告、加复杂逻辑」这类活,就有点吃力了。
写 Shell 脚本时,“交互” 是提升体验的关键 —— 尤其是运维脚本、工具类脚本,用户更想要一份清晰的操作指引,而不是去背一堆命令行参数。
在 Shell 脚本里, for 循环 专门用来干“重复又类似的活”——它会自动挨个取出一组值(比如一个列表、一串文件、或者某个命令的输出),对每一个值跑一遍相同的命令,省得你手动复制粘贴一堆重复代码。
Shell 函数的定义语法挺灵活,调用起来跟普通命令一样,先把最核心的"定义 - 调用"流程搞明白。
这些需求的本质,其实就是 对脚本的“生命周期”和“运行环境”做精准控制 。这篇从“信号处理”“后台运行”“作业控制”“定时调度”四个维度,系统讲讲 Shell 脚本的全场景控制技巧,帮你解决脚本运行中的各种“失控”问题。
想把这几种"数据分流"玩灵活,关键得理解 Linux 是怎么抽象 输入 / 输出(I/O) 的——也就是标准文件描述符。
写 Shell 脚本的时候,你大概撞见过下面这些奇怪的情况?
在 Shell 脚本里,如果你要根据同一个变量的不同取值走不同逻辑(比如按当前登录用户、命令参数、状态码来执行不同操作),用 if-elif-else 写出来会又长又难维护。
写 Shell 脚本时,test 命令就是干「条件判断」这活的核心工具——它能判断变量、字符串、文件满不满足某个条件,再用「退出状态码」告诉后面的逻辑(比如 if-then)到底执不执行。
写 Shell 脚本时,until 循环跟 while 正好反过来——while 是「条件成立才循环」,until 是「条件不成立才循环」,一直等到条件成立才停。
在 Shell 脚本里,while 循环就是干“重复执行任务”这件事的核心命令。它的逻辑可以这么理解:把它当成“if-then 的条件判断 + for 循环的重复执行”揉在一起——不停地去检查一个“测试命令”的结果,只要结果符合预期(退出状态码是 0),就反复执行一组命令。
Bash 自带了一整套工具来处理这些场景,掌握了它们,脚本就能从「写死的逻辑」升级成「可配置、能交互」的实用工具。
说白了,if 语句最核心的价值就是: 让脚本长出“如果…就…”的判断能力 ,这也是脚本能自动化、变聪明的根基。
在 Shell 脚本里,普通变量一次只能存一个值(比如 name="roger"),而 数组(Array) 能存一堆值(比如 myArr=(zero one two)),还能按索引或键名快速取、改某个元素,是处理批量数据的得力工具。
在 Linux 命令行里,我们经常要把好几个命令串起来按顺序跑,但"依次执行"和"进程列表"其实不是一回事——只有特定格式的命令组合才配叫进程列表,核心差别就在于它 有没有创建子 shell 。
在 Shell(Bash/Zsh 这些)里操作的时候,咱们经常会碰到“重复使用上一次命令的参数”的情况——比如刚用 cd /home/user/projects 进了项目目录,接着想执行 ls /home/user/projects 看里面有什么,这时候把路径再敲一遍既麻烦又容易敲错。