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

【linux】(6)文本处理sed

sed(stream editor)是可以根据指定的脚本对输入文本进行编辑、替换、删除等操作。

基本用法

sed [options] 'script' [file...]

常用选项

  1. -n:抑制默认输出。通常 sed 会打印每一行,通过 -n 选项可以只打印被脚本处理的行。

    sed -n 'p' filename
    
  2. -e:允许多脚本处理。可以指定多个 -e 选项来处理文本。

    sed -e 'script1' -e 'script2' filename
    
  3. -f:从文件中读取脚本。

    sed -f script.sed filename
    
  4. -i:直接编辑文件而不是输出到标准输出。

    sed -i 's/old/new/' filename
    
  5. -r:使用扩展正则表达式(ERE)。

    sed -r 's/regex/replacement/' filename
    
  6. -E:同 -r,使用扩展正则表达式(兼容性选项)。

    sed -E 's/regex/replacement/' filename
    

基本操作

替换
  1. 替换字符串

    sed 's/old/new/' filename
    

    例子:将文件 example.txt 中的所有 hello 替换为 world

    sed 's/hello/world/' example.txt
    
  2. 全局替换

    sed 's/old/new/g' filename
    

    例子:将文件 example.txt 中的所有 hello 替换为 world,包括每行中出现的所有 hello

    sed 's/hello/world/g' example.txt
    
  3. 指定替换某一行

    sed '2s/old/new/' filename
    

    例子:将文件 example.txt 中第二行的 hello 替换为 world

    sed '2s/hello/world/' example.txt
    
  4. 替换第 N 次出现的匹配项

    sed 's/old/new/3' filename
    

    例子:将文件 example.txt 中每行第 3 个 hello 替换为 world

    sed 's/hello/world/3' example.txt
    
删除
  1. 删除某一行

    sed 'Nd' filename
    

    例子:删除文件 example.txt 中的第 2 行。

    sed '2d' example.txt
    
  2. 删除匹配的行

    sed '/pattern/d' filename
    

    例子:删除文件 example.txt 中包含 hello 的行。

    sed '/hello/d' example.txt
    
  3. 删除从第 M 行到第 N 行

    sed 'M,Nd' filename
    

    例子:删除文件 example.txt 中第 2 到第 4 行。

    sed '2,4d' example.txt
    
插入和追加
  1. 在某一行前插入文本

    sed 'N i\text' filename
    

    例子:在文件 example.txt 中的第 2 行前插入 hello world

    sed '2i\hello world' example.txt
    
  2. 在某一行后追加文本

    sed 'N a\text' filename
    

    例子:在文件 example.txt 中的第 2 行后追加 hello world

    sed '2a\hello world' example.txt
    
替换指定范围内的文本
  1. 替换从第 M 行到第 N 行的文本

    sed 'M,Ns/old/new/' filename
    

    例子:将文件 example.txt 中第 2 行到第 4 行的 hello 替换为 world

    sed '2,4s/hello/world/' example.txt
    

高级用法

使用正则表达式
  1. 替换包含正则表达式模式的文本

    sed 's/regex/replacement/' filename
    

    例子:将文件 example.txt 中所有以 h 开头的单词替换为 world

    sed 's/\bh\w*/world/g' example.txt
    
处理多行文本
  1. 在每行末尾添加文本

    sed 's/$/text/' filename
    

    例子:在文件 example.txt 中每行末尾添加 world

    sed 's/$/ world/' example.txt
    
  2. 在每行开头添加文本

    sed 's/^/text/' filename
    

    例子:在文件 example.txt 中每行开头添加 hello

    sed 's/^/hello /' example.txt
    
多个脚本命令
  1. 使用多个 -e 选项

    sed -e 'command1' -e 'command2' filename
    

    例子:在文件 example.txt 中将 hello 替换为 hi,然后将 world 替换为 everyone

    sed -e 's/hello/hi/' -e 's/world/everyone/' example.txt
    
  2. 从文件读取脚本

    sed -f script.sed filename
    

    script.sed 文件内容:

    s/hello/hi/
    s/world/everyone/
    

    使用 sed 命令执行脚本:

    sed -f script.sed example.txt
    

结合其他命令

  1. grep 结合使用

    grep 'pattern' filename | sed 's/old/new/'
    
  2. awk 结合使用

    awk '{print $1}' filename | sed 's/old/new/'
    

相关文章:

  • 《软件定义安全》之一:SDN和NFV:下一代网络的变革
  • Python Flask实现蓝图Blueprint配置和模块渲染
  • 【Python报错】已解决FileNotFoundError: [Errno 2] No such file or directory: ‘xxx‘
  • Golang Context详解
  • 风能远程管理ARMxy嵌入式系统深度解析
  • 软件游戏steam_api.dll丢失的解决方法,总结5种有效的方法
  • Leetcode 3177. Find the Maximum Length of a Good Subsequence II
  • C# 共享内存
  • Linux操作系统:Zookeeper在虚拟环境下的安装与部署
  • 手撸一个java简易聊天室
  • 【UML用户指南】-13-对高级结构建模-包
  • Windows 搭建C++ 纯开源开发环境 进行 YOLOv8 模型推理的开发测试环境
  • 快速开始一个go程序(极简-快速入门)
  • 基于R语言BIOMOD2 及机器学习方法的物种分布模拟与案例分析
  • Java24:会话管理 过滤器 监听器
  • es6
  • 简单基于spring的redis配置(单机和集群模式)
  • 精彩代码 vue.js
  • 力扣(LeetCode)357
  • 日剧·日综资源集合(建议收藏)
  • 我建了一个叫Hello World的项目
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 异步
  • 译有关态射的一切
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #if #elif #endif
  • (12)Linux 常见的三种进程状态
  • (2024,LoRA,全量微调,低秩,强正则化,缓解遗忘,多样性)LoRA 学习更少,遗忘更少
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (webRTC、RecordRTC):navigator.mediaDevices undefined
  • (剑指Offer)面试题34:丑数
  • (顺序)容器的好伴侣 --- 容器适配器
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)chrome浏览器收藏夹(书签)的导出与导入
  • .cn根服务器被攻击之后
  • .NET 命令行参数包含应用程序路径吗?
  • .NET/C# 使窗口永不获得焦点
  • [AutoSar]状态管理(五)Dcm与BswM、EcuM的复位实现
  • [BZOJ] 3262: 陌上花开
  • [C# WPF] 如何给控件添加边框(Border)?
  • [C]编译和预处理详解
  • [C++]——带你学习类和对象
  • [Codeforces] number theory (R1600) Part.11
  • [ERROR] 不再支持目标选项 5。请使用 7 或更高版本
  • [git] windows系统安装git教程和配置
  • [hdu1561] The more, The Better 【树形DP】
  • [JDK工具-2] javap 类文件解析工具-帮助理解class文件,了解Java编译器机制
  • [LeetCode 127] - 单词梯(Word Ladder)
  • [leetcode]_Symmetric Tree
  • [LeetCode]—Permutations 求全排列
  • [mvc] 简单的forms认证
  • [NAND Flash 6.4] NAND FLASH基本读操作及原理_NAND FLASH Read Operation源码实现