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

理解sed命令

深入理解sed命令:Linux文本处理的瑞士军刀

  • 前言
  • 一、sed简介
  • 二、sed工作原理
  • 三、sed命令语法
        • 3.1 常用选项
        • 3.2 常用操作命令
  • 四、sed实用示例
        • 4.1 输出文本
        • 4.2 删除文本
        • 4.3 替换文本
        • 4.4 迁移文本
  • 五、生产实践案例
        • 5.1 修改网络配置
        • 5.2 调整Apache配置
        • 5.3 配置vsftpd服务
  • 六、高级技巧
        • 6.1 分组操作
        • 6.2 脚本文件方式
  • 结语

前言

  在Linux系统管理和日常开发中,文本处理是一项基础而重要的技能。sed(Stream EDitor)作为Linux三剑客之一,以其强大的文本处理能力著称。本文将全面介绍sed命令的工作原理、常见用法和生产实践案例,帮助读者掌握这一高效的文本处理工具。

一、sed简介

  sed(Stream EDitor)是一种流式文本编辑器,它通过脚本指令来处理、编辑文本文件。主要用途包括:

  • 自动编辑一个或多个文件
  • 简化对文件的反复操作
  • 编写转换程序等

二、sed工作原理

  理解sed的工作原理对于正确使用它至关重要。sed的工作流程主要包括三个过程:

  • 读取‌:从输入流(文件、管道、标准输入)中读取一行内容并存储到临时的缓冲区(模式空间)
  • 执行‌:默认情况下,所有sed命令都在模式空间中顺序执行
  • 显示‌:发送修改后的内容到输出流,然后清空模式空间
    具体执行过程如下:
  • 读入新的一行内容到缓存空间
  • 从操作指令中取出第一条指令,判断是否匹配pattern
  • 不匹配则忽略后续命令,继续取下一条指令
  • 匹配则执行编辑命令,完成后继续取下一条指令
  • 所有指令应用后,输出缓存行内容
  • 重复上述过程直到所有行处理完毕

注意‌:默认情况下sed不会直接修改原文件,除非使用重定向或-i选项。

三、sed命令语法

基本语法格式:

sed [选项] '操作' 参数
sed [选项] -f scriptfile 参数
3.1 常用选项
选项含义
-e进行多次编辑
-n取消默认输出
-f指定sed脚本文件
-i直接在源文件中修改
-r使用扩展正则表达式
3.2 常用操作命令
命令含义
p打印输出
d删除指定行
i在指定行前插入内容
a在指定行后插入内容
c替换指定行所有内容
s搜索替换

四、sed实用示例

4.1 输出文本
sed -n 'p' demo          # 输出所有内容,等同于cat
sed -n '3p' demo         # 输出第3行
sed -n '3,5p' demo       # 输出3-5行
sed -n '/the/p' demo     # 输出包含the的行
sed -n '/^PI/p' demo     # 输出以PI开头的行

在这里插入图片描述
在这里插入图片描述

4.2 删除文本
sed '3d' demo            # 删除第3行
sed '3,5d' demo          # 删除3-5行
sed '/come/d' demo      # 删除包含cross的行
sed '/^$/d' demo         # 删除所有空行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 替换文本
sed 's/the/THE/' demo    # 每行第一个the替换为THE
sed 's/the/THE/g' demo   # 所有the替换为THE
sed 's/$/EOF/' demo      # 每行行尾插入EOF
sed -i.bak 's/SELINUX=disabled/SELINUX=enable/' /etc/selinux/config  # 直接修改文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.4 迁移文本
sed '/the/{H;d};$G' demo      # 包含the的行迁移至文件末尾
sed '1,5{H;d};17G' demo       # 1-5行内容转移至17行后
sed '/the/w out.file' demo    # 包含the的行另存为文件
sed '3aNew' demo              # 第3行后插入新行

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、生产实践案例

5.1 修改网络配置
# 将ens33接口IP修改为192.168.10.100
sed -i 's/^IPADDR=.*/IPADDR=192.168.10.100/' /etc/sysconfig/network-scripts/ifcfg-ens33

在这里插入图片描述
在这里插入图片描述

5.2 调整Apache配置
# 修改监听地址和端口
sed -i 's/^Listen .*/Listen 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf
sed -i 's/^ServerName .*/ServerName 192.168.10.100:8080/' /etc/httpd/conf/httpd.conf

在这里插入图片描述

5.3 配置vsftpd服务
#!/bin/bash
SAMPLE="/usr/share/doc/vsftpd-3.0.2/EXAMPLE/INTERNET_SITE/vsftpd.conf"
CONFIG="/etc/vsftpd/vsftpd.conf"
# 备份配置文件
[ ! -e "$CONFIG.bak" ] && cp $CONFIG $CONFIG.bak
# 调整配置
sed -e '/^anonymous_enable/s/YES/NO/g' $SAMPLE > $CONFIG
sed -i -e '/^local_enable/s/NO/YES/g' -e '/^write_enable/s/NO/YES/g' $CONFIG
grep "listen" $CONFIG || sed -i '$alisten=YES' $CONFIG
# 重启服务
systemctl restart vsftpd
systemctl enable vsftpd

六、高级技巧

6.1 分组操作
# 对一行数据进行多次操作
sed '/root/{s/root/ROOT/;s/x/X/g}' /tmp/passwd
# 使用正则分组
echo 123abcxyz |sed -r 's/(123)(abc)(xyz)/\1/'  # 只保留第一组(123)
# 提取IP地址
ifconfig ens33|sed -rn '2s/.*inet ([0-9.]+) .*/\1/p'
6.2 脚本文件方式

将多个编辑指令存放到文件中(每行一条),通过-f选项调用:

# opt.list内容:
1,5H
1,5d
16G
# 执行脚本
sed -f opt.list demo

在这里插入图片描述

结语

  sed作为Linux下强大的流式文本编辑器,虽然学习曲线较陡,但一旦掌握,可以极大提高文本处理效率。本文从基本原理到常见用法,再到生产实践案例,全面介绍了sed的各个方面。建议读者结合实际需求多加练习,逐步掌握这一文本处理的瑞士军刀。记住,sed的强大之处在于它能够将复杂的文本处理任务自动化,从而节省大量时间和精力。


文章转载自:

http://VewQMLJC.ktqtf.cn
http://UQb0en1Y.ktqtf.cn
http://vjFUGslH.ktqtf.cn
http://OJAGQorr.ktqtf.cn
http://rb1GPYim.ktqtf.cn
http://HNQWCwMG.ktqtf.cn
http://JHdg6au0.ktqtf.cn
http://7LbuYJw4.ktqtf.cn
http://L2pkM4rq.ktqtf.cn
http://XturkYv9.ktqtf.cn
http://oxvuNZuC.ktqtf.cn
http://RNd8FCCw.ktqtf.cn
http://RCAifsw8.ktqtf.cn
http://9T38aKom.ktqtf.cn
http://QrqUHAcj.ktqtf.cn
http://EBoUmfJG.ktqtf.cn
http://SPjZGQF9.ktqtf.cn
http://UUcIcFVv.ktqtf.cn
http://rIEjmPNx.ktqtf.cn
http://kOMtwpYN.ktqtf.cn
http://zUNCMO6E.ktqtf.cn
http://nzJ9uvaC.ktqtf.cn
http://3kdnA34V.ktqtf.cn
http://Bg2dMwJD.ktqtf.cn
http://Lm4AjJUu.ktqtf.cn
http://Qxx1z9XG.ktqtf.cn
http://aN40pkR1.ktqtf.cn
http://mJEvUykM.ktqtf.cn
http://BhM4Zsdp.ktqtf.cn
http://dJLbgAzl.ktqtf.cn
http://www.dtcms.com/a/365034.html

相关文章:

  • 干货知识:ERP、CRM、OA,小公司到底先上哪个?
  • 从 0 到 1 实现 PyTorch 食物图像分类:核心知识点与完整实
  • k8s知识点总结3
  • 基于 CC-Link IE FB 转 DeviceNet 技术的三菱 PLC 与发那科机器人在汽车涂装线的精准喷涂联动
  • Grafana Loki日志聚合系统深度解析:选型、竞品、成本与资源消耗
  • 安卓9.0系统修改定制化____如何修改安卓低版本固件 解决 API/SDK 版本过低的问题
  • 题解:UVA1589 象棋 Xiangqi
  • 根据fullcalendar实现企业微信的拖动式预约会议
  • 别错过!一杯奶茶钱开启企业微信 Power BI 之旅
  • gitlab推送失败,内存不足的处理
  • iOS蓝牙使用及深入剖析高频高负载传输丢包解决方案(附源码)
  • 【STL】C++ 开发者必学字符类详解析:std::string
  • 【人工智能学习之MMdeploy部署踩坑总结】
  • Linux之shell-awk命令详解
  • Ai Qwen3解答epochs多少为最佳 仅共参考
  • AI时代:智能体系统构建基本范式
  • 峰谷套利+动态增容:工商业储能能量管理系统的妙用
  • Docker容器与镜像:两种导入导出方式全解析
  • 洛谷 P3128 [USACO15DEC] Max Flow P -普及+/提高
  • 企业实用——MySQL的备份详解
  • Airsim 笔记:Python API 总结
  • 部署jenkins并基于ansible部署Discuz应用
  • 【ASP.NET Core】基于MailKit(SMTP 协议)实现邮件发送
  • Hadoop HDFS-SecondaryNameNode(2nn)详细介绍
  • 趣味学RUST基础篇(泛型)
  • OpenCL 中 内存对象完全详解和实战示例
  • 【Cursor-Gpt-5-high】StackCube-v1 任务训练结果不稳定性的分析
  • Vue3 + Ant Design Vue 实现多选下拉组件(支持分组、搜索与标签省略)
  • 【教程】IDEA中导入springboot-maven工程
  • websocket用于控制在当前页只允许一个用户进行操作,其他用户等待