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

Linux命令:文本处理工具sed详解

目录

一、概述

二、用法

1、基本语法

2、常用选项

3、命令格式

4、编辑命令

5、获取帮助

三、 示例

1、替换字符串

2、删除行

(1)删除包含"string"的所有行

​编辑

(2)删除从第1行到第10行的所有行

3、插入行

(1)在匹配"string"的行之前插入一行文本

(2)在匹配"string"的行之后插入一行文本

4、打印行

5、地址范围

四、高级用法示例

1、复合命令

2、脚本模式

五、 注意事项


一、概述

        sed(stream editor)是Linux/Unix系统中的一个强大的文本处理工具,它可以从标准输入读取数据,执行编辑命令,然后将修改后的输出发送到标准输出。sed命令非常适用于文本文件的处理,包括查找、替换、删除、添加行等操作,而无需修改原始文件。

       熟练掌握它sed可以极大地提高文本处理效率。

二、用法

1、基本语法

        sed的基本命令格式如下:

                sed [选项] '命令' 文件

        或者用于处理标准输入:

                sed [选项] '命令'

2、常用选项

 -e 或 --expression:指定要执行的一个或多条sed命令。

 -f 或 --file:从指定的文件中读取sed命令。

 -n 或 --quiet:抑制默认输出,只打印那些由p或=命令产生的行。

 -i 或 --in-place:直接修改输入文件而不是输出到标准输出。

 -u:使用-i时启用未缓冲模式,这对于大型文件尤其有用。

 -l 或 --line-length:设置每行打印字符数。

3、命令格式

sed命令通常包含地址和动作,格式如下:

        地址 { 动作 }

如果省略了地址,默认对所有行执行动作。

4、编辑命令

sed 的编辑命令非常多,但以下是一些最常用的:

  • s/pattern/replacement/flags:替换操作。将匹配 pattern 的内容替换为 replacement。flags 可以是 g(全局替换),i(忽略大小写)等。
  • d:删除操作。删除匹配的行。
  • p:打印操作。打印匹配的行(通常与 -n 选项一起使用)。
  • a\text:在匹配行之后追加文本 text。
  • i\text:在匹配行之前插入文本 text。
  • c\text:用文本 text 替换匹配的行。

5、获取帮助

输入如下命令:

        sed –-h

出现如下图所示的帮助信息:

三、 示例

1、替换字符串

将文件中所有的"oldstring"替换为"newstring":

sed 's/oldstring/newstring/' file12.txt

实际操作如下:

全局替换(即替换每一行中所有的匹配项):

sed 's/oldstring/newstring/g' file.txt

2、删除行

(1)删除包含"string"的所有行

        sed '/string/d' file.txt

        实际操作如下:

(2)删除从第1行到第10行的所有行

        sed '1,10d' file.txt

3、插入行

(1)在匹配"string"的行之前插入一行文本

sed '/string/i\

New line inserted here.' file.txt

(2)在匹配"string"的行之后插入一行文本

sed '/string/a\

New line inserted here.' file.txt

4、打印行

打印包含"string"的所有行:

        sed -n '/string/p' file.txt

实际操作如下:

5、地址范围

指定操作作用于某一行或一组行:

        sed '10,20s/old/new/' file.txt  替换第10到第20行中的old为new

四、高级用法示例

1、复合命令

可以组合多个命令,用分号;分隔:

sed '1s/^/ /; 2s/^/ /' file.txt  第1行和第2行前加

2、脚本模式

可以将多个命令写在一个文件中,然后用-f选项来运行这个脚本文件:

echo "s/old/new/" > sedscript

sed -f sedscript file.txt

五、 注意事项

1、sed命令是区分大小写的。

2、使用sed直接修改文件时要小心,因为一旦修改无法撤销。

3、对于复杂的文本处理任务,可能需要结合正则表达式或其他命令一起使用。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。



http://www.kler.cn/news/307284.html

相关文章:

  • django中F()和Q()的用法
  • 保姆级离线+windows环境+大模型前端UI安装(二)
  • 基于Spring Boot的停车场管理系统的设计与实现
  • 【STL】 set 与 multiset:基础、操作与应用
  • Vue路由配置、网络请求访问框架项目、element组件介绍学习
  • 数据库连接池与Druid【后端 16】
  • STM32 HAL freertos零基础(十)软件定时器
  • Renesas R7FA8D1BH (Cortex®-M85)控制ISLS29035
  • Unity-Transform类-父子关系
  • 五、(JS)window中的定时器
  • PhotoZoom Pro / Classic 9.0.2激活版安装激活图文教程
  • 栈与队列(c语言实现)
  • GAMES101(2~3作业)
  • 【系统架构设计师】单例模式(Singleton Pattern)
  • PCIe进阶之TL:Common Packet Header Fields TLPs with Data Payloads Rules
  • MYSQL数据库基础篇——MYSQL的安装与使用
  • Go中如何找到哪里依赖了某个module,如何找到所有module的最大GoVersion
  • 【UE5 C++课程系列笔记】02——创建C++类的三种方式
  • 如何快速整理生成python项目依赖的库,提升自动化部署效率
  • jdk相关介绍
  • 【Linux下的cpp】编译调试(gcc、g++、gdb)
  • 工程师 - ACPI和ACPICA的区别
  • [Redis] Redis中的Hash类型和List类型
  • 29 线性表 · 队列
  • 【人工智能】Transformers之Pipeline(十八):文本生成(text-generation)
  • C语言实现贪吃蛇小游戏
  • 【技术科普】揭秘图像处理:从零开始的计算机视觉之旅!
  • 海量数据查找最大K个值:数据结构与算法的选择
  • 【Node.js】初识微服务
  • CANopen协议的理解