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

Linux命令之sed

文章目录

  • 1.什么是sed?
  • 2.常用命令
  • 3.以行为单位的新增/删除
  • 4.以行为单位的取代与显示
  • 5.数据搜寻与取代
  • 6.多点编辑
  • 7.直接修改文件(危险行为)

1.什么是sed?

  • 官方解释:

    ‘sed’ is a stream editor. A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline). While in some ways similar to an editor which permits scripted edits (such as ‘ed’), ‘sed’ works by making only one pass over the input(s), and is consequently more efficient. But it is ‘sed’'s ability to filter text in a pipeline which particularly distinguishes it from other types of editors.

  • sed是一个流编辑器。流编辑器用于对输入流(来自管道的文件或输入)执行基本的文本转换。虽然在某些方面类似于允许脚本编辑的编辑器(例如’ed’),但sed只通过一次传递输入来工作,因此效率更高。与其他类型的编辑器相比,sed在管道中过滤文本的能力尤为突出。

  • sed是一个批处理非交互式编辑器,可以对来自文件或者标准输入的输入流进行转换。sed一次处理一行文本并把处理结果输出到标准输出设备。sed把当前处理的行内容存储在pattern区。当sed完成对模式空间中行的处理后,模式空间中的行被送往标准输出,行被处理完成后,就被移出模式空间,程序接着读入下一行处理、显示、移出…直到文件最后一行处理完成。

2.常用命令

# sed [-nefr] [动作]
选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。
		 但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :用于多点编辑,每个-e 选项后都可以接一个动作;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 1020 行之间进行的,则『 10,20[动作行为] 』

function:
a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :打印,将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :取代,可以直接进行取代的工作!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g,g含义是全局替换

3.以行为单位的新增/删除

  • 新建一个测试文本 1.txt,内容如下
这是一个测试文档,
主用来学习sed语法,
让我们现在开始!

hello 
world 

this is a new hello world!
  • 示例代码:
# 删除1.txt中的2-5行
sed '2,5d' 1.txt

# 删除1.txt中的第2行
sed '2d' 1.txt

#删除1.txt中的2-最后一行
sed '2,$d' 1.txt

# 在第二行的下方添加内容为“drink tea”的一行
sed '2a drink tea' 1.txt

# 在第二行的上方添加内容为“drink tea”的一行
sed '2i drink tea' 1.txt

# 在第二行的下方添加多行内容,\后接回车键换行
sed '2a drink tea or .....\
drink beer?' 1.txt

4.以行为单位的取代与显示

  • 示例代码:
# 将2-5行替换为"No 2-5 number"
sed '2,5c No 2-5 number' 1.txt

# 列出5-7行的内容,不加-n会重复显示5-7的内容
sed -n '5,7p' 1.txt

5.数据搜寻与取代

  • 示例代码:
# sed 's/要被取代的字串/新的字串/g’
sed 's/hello/world/g' 1.txt

# 获取机器的IP地址
/sbin/ifconfig | grep 'inet 10' | sed 's/^.*inet //g' | sed 's/ *netmask.*$//g'
输出 10.223.17.4 地址

6.多点编辑

  • 示例代码
# 删除4到末尾的内容,并将剩余内容中的sed 替换为 this sed
cat 1.txt | sed -e '4,$d' -e 's/sed/this sed/'

7.直接修改文件(危险行为)

  • sed -i 可以对文件内容进行直接修改,不输出到终端(默认是输出到终端)
# 在1.txt文件末尾加一行“This is a test file” 内容
sed -i '$a # This is a test file' 1.txt

http://www.kler.cn/a/146106.html

相关文章:

  • Java开发提速秘籍:巧用Apache Commons Lang工具库
  • 1.写在前面
  • vue3+elementPlus之后台管理系统(从0到1)(day2)
  • leetcode-买卖股票问题
  • vue 学习笔记 - 创建第一个项目 idea
  • Nmap之企业漏洞扫描(Enterprise Vulnerability Scanning for Nmap)
  • AI和人工智能与机器学习全景报告
  • 在线知识库管理平台zyplayer-doc
  • MyBatis-Plus简介和入门操作
  • Java基础之数组
  • 基于ssm的网上订餐系统
  • 工业自动化配电柜监控技术,不会用就太可惜了!
  • MIMO雷达(TI文档)
  • 相机内存卡照片删除怎么恢复?没有备份可这样操作
  • HBase数据模型杂谈
  • 毅速丨3D打印随形水路为何受到模具制造追捧
  • 141.【Git版本控制-本地仓库-远程仓库-IDEA开发工具全解版】
  • 英特尔工作站:助力专业用户实现高效创作
  • Alfred v5.1.4(mac快速启动)
  • 旋转框检测项目相关python库知识总结(mmrotate、ppyolo_r、yolov5_obb)
  • 【Web安全】xss攻击方式与绕过
  • Java基础之集合类
  • 全面探讨HTTP协议从0.9到3.0版本的发展和特点
  • ChatGPT进阶:提示工程的神秘面纱与实战指南
  • VSCode 警告:v-on event ‘@toggleClick‘ must be hyphenated
  • Linux:docker容器操作(4)