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

sed命令

文章目录

  • 一、sed工作流程
  • 二、sed使用方法
  • 三、sed的脚本使用

一、sed工作流程

1、首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓存区中的行,完成后把该行发送到屏幕上。
2、sed把每一行都存在临时缓存区中,对这个副本进行编辑,所以不会修改源文件。
3、sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

二、sed使用方法

  • sed的常见语法格式有两种,一种叫命令行模式,另一种叫脚本模式。
    1、命令行模式,格式:sed [option] ‘sed的命令|地址定位’ filename
option:
1、-e  进行多项编辑,即对输入行应用多条sed命令时使用
2、-n  取消默认的输出
3、-f  指定sed脚本的文件名
4、-r  使用扩展正则表达式
5、-i  inplace,原地编辑(修改源文件)常用命令和选项:
1、p  打印行
[root@localhost ~]# sed -n '1p' 2.txt    #打印第一行
root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# sed -n '2p' 2.txt    #打印第二行
bin:x:1:1:bin:/bin:/sbin/nologin
[root@localhost ~]# sed -n '1,3p' 2.txt  #打印第一到第三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
2、d  删除行
[root@localhost ~]# sed  '1d' 2.txt      #删除第一行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
3、i 在当前行之前插入文本,多行时除最后一行外,每行末尾需用“\”续行
[root@localhost ~]# sed "1ihello" 2.txt     #在第一行前插入hello
hello
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# sed "1ihello\nworld" 2.txt    #在第一行之前插入hello和world,通过\n换行
hello
world
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
4、a 在当前行后添加一行或多行,多行时除最后一行外,每行末尾需用“\”续行
[root@localhost ~]# sed "3ahello" 2.txt   #在第3行之后插入hello
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
hello
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# sed '$ahello' 2.txt   #在最后一行插入hello
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
hello
5、c 用此符号后的新文本替换当前行中的文本,多行时除最后一行外,每行末尾需用“\”需行,整行替换
[root@localhost ~]# sed '2chello world' 2.txt   #将第2行整行替换为hello world
root:x:0:0:root:/root:/bin/bash
hello world
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[root@localhost ~]# sed '/root/chello world' 2.txt  #匹配root行,替换为hello world
hello world
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6、r 从文件中读取输入行
[root@localhost ~]# sed '3r /etc/hosts' 2.txt   #将/etc/hosts输入到第3行之后
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7、w 将所选的行写入文件
[root@localhost ~]# sed '1,3w a.txt' 2.txt   #将2.txt文件中1到3行的内容输出到a.txt
8、! 对所选行以外的所有行应用命令,放到行数之后
[root@localhost ~]# sed -n  '4!p' 2.txt    #打印除第4行之外的所有行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
9、s 用一个字符串替换另一个
[root@localhost ~]# sed -n  's/root/ROOT/p' 2.txt #将root替换为大写的ROOT,但是只是替换首个匹配到的root
ROOT:x:0:0:root:/root:/bin/bash
[root@localhost ~]# sed -n  '1,2s/^/#/p' 2.txt  #将1和2行的行首加上#号,可以用作批量注释
#root:x:0:0:root:/root:/bin/bash
#bin:x:1:1:bin:/bin:/sbin/nologin
10、g 在行内进行全局替换
[root@localhost ~]# sed -n  's/root/ROOT/gp' 2.txt   #加上g表示进行全局替换
ROOT:x:0:0:ROOT:/ROOT:/bin/bash
11& 代表前面匹配到的整个内容,允许你在替换时引用原匹配文本
[root@localhost ~]# echo "192.168.1.1" | sed 's/[0-9.]*/&_backup/'
# 输出:192.168.1.1_backup
12= 打印行号

三、sed的脚本使用

1、两种执行方法
[root@localhost ~]# sed   -f   scripts.sed   file 
[root@localhost ~]# ./1.sed   file   #建议使用
2、脚本写法
注意事项:1)脚本文件是一个sed的命令行清单2)在每行的末尾不能有任何空格、制表符或其他文本3)如果在一行中有多个命令,应该用分号分隔4)不需要且不可用引号保护命令5)井号开头的行为注释
[root@localhost ~]#cat 1.sed
#!/bin/sed  -f
1,5d
s/root/hello/g
3i777
5i888
p
[root@localhost ~]#sed  -f  1.sed  -i  2.txt  #加上-i对源文件进行更改
[root@localhost ~]# ./1.sed  -i  2.txt  
http://www.dtcms.com/a/301373.html

相关文章:

  • 通信名词解释:I2C、USART、SPI、RS232、RS485、CAN、TCP/IP、SOCKET、modbus
  • 【通识】设计模式
  • catkin_make生成的编译文件夹目录结构说明
  • uart通信
  • python---类型转换
  • Milvus 实战全流程
  • Deja Vu: 利用上下文稀疏性提升大语言模型推理效率
  • Spring 解析 XML 配置文件的过程(从读取 XML 到生成 BeanDefinition)
  • 扩展组件(uni-ui)之uni-group
  • 「iOS」————消息传递和消息转发
  • 26.删除有序数组中的重复项
  • MyBatis-Plus高效开发实战
  • 内存管理和垃圾收集-02: 操作系统如何管理内存?
  • Linux驱动开发笔记(五)——设备树(中)——节点的标准属性
  • 益莱储:明智地投资测试仪器
  • S7-1500 与 S7-1200 存储区域保持性设置特点详解
  • 电子板原理功能区解析与PlantUML图示
  • 3,Windows11安装docker保姆级教程
  • 轻量化多模态文档处理利器SmolDocling:技术原理与场景落地引言:文档智能处理的范式革命
  • 数据结构基础内容(第六篇:二叉搜索与平衡二叉树)
  • MySQL锁机制与MVCC原理剖析
  • 直播带货工具About v1.5.10 免费版
  • GEO优化实战:如何在DeepSeek、豆包等AI平台抢占推荐位?
  • MOE架构详解:原理、应用与PyTorch实现
  • 计算圆周率(π)代码实现【c++】
  • Java中排序规则详解
  • cJSON在STM32单片机上使用遇到解析数据失败问题
  • 计算柱状图中最大的矩形【单调栈】
  • Dify 本地化部署深度解析与实战指南
  • 蜣螂优化算法的华丽转身:基于Streamlit的MSIDBO算法可视化平台