sed简单使用介绍

sed的简单介绍


sed起源于行编辑器ed,sed用于专门执行脚本的,sed不可以交互使用,
sed是面向字符流的(区别于屏幕编辑器,vi,vim ,nano等)

屏幕编辑器直接将文件读入内存,或文件的一部分读入内存,但是当文件体积过大时,可能造成内存不足等情况

面向字符流的编辑器,每次默认读取一行,输入流通过程序处理并输出到标准输出,输入可以来自文件 也可以来自标准输入,输出默认是标准输出,sed通过解释脚本工作,脚本定义了要执行的工作, ,默认情况下到sed的所有匹配的输入都会经过相应的处理,并转化为标准输出,但输入文件不发生变化


执行过程

每次读取一行,将读取的内容放入内存中的特定空间中(即:模式空间).
然后并检测当前行是否符合匹配条件(或多条匹配条件中的某些条条件),
如果符合执行条件则执行命令中的当前命令,然后继续后续检测,
如果不符合条件则跳过本条条件及命令,进行后续检测
所有的条件匹配完成后,sed输出模式空间中的内容.继续读取下一行,直到文件无法读取(即文件结束) sed的内存空间可以分为,模式空间和保持空间,(a,i,d,c,s,p等)命令可对模式空间的文本内容进行修改操作,(h,g,x,n)命令对模式空间与爆出空间的内容进行整体移动操作(及移动,覆盖,追加)


语法:
sed 选项 范围 命令 file
注:命令行的所有命令都会由shell优先解释后在传入sed命令中,在不需要shell做转换时,指定范围命令时尽可能使用单引号,

选项
-n 关闭默认输出
-e 多条语句同时执行
-f 从文件中读取命令
-r 支持能扩展的正则表达式
-i.bak 备份源文件为.bak后缀,将更改生效到文件

范围 格式 匹配条件1,匹配条件2
从匹配条件1的行开始[ ; 至匹配条件2的行结束] ([]表示闭区间)

范围为空将匹配全部行 (所以条件只是为了约束 匹配范围).
只存在一个匹配条件时,则表示符合该条件的行

匹配条件的几种表示方法

数字行号  , 到  10 , 251025
正则匹配  /  / 匹配 关键字  /  / ,/  /  
第一开始到第二结尾,第一个关键字类似于开启,后面的都会执行命令 直到第二个匹配条件出现,匹配结束,  
若无第二个匹配条件出现,则将一直执行到程序结束

$ 最后一行
+增量 1,+20 表示1到21 行
~步长 1~2 1 3 5
每次范围匹配结束后如果文件未读取完成则再次执行范围匹配

命令
命令

多条命令之间可以使用 ; 进行分割
	如 sed 'p;d'  sed '1~2p;1~2d'
c替换行
    格式:sed "3,6c\   =====" 替换3-6行为指定行(替换后3-6行为1行)

w保存:
    格式 sed "3,6w ww" 保存3-6行的内容至ww文件没有文件则创建 (当前目录下)

r读文件:
    格式 sed "3,6r /dev/issue" 读取文件内容,追加到匹配的行后,每一行后面都会被追加完整的(读入的文件)文件内容

d删除匹配到的行:
    格式 sed "3,6d" 删除3到6行的内容

p打印 
    格式 sed "3,6p" 打印3到6行的内容,
    注:若要只打印3,6行,使用 -n 取消默认dayin
        
s 替换匹配文本
    格式: sed '3,6s/passwd//g(标签) 
    标签: g全局  p打印 w保存
    将文件3到6行中的passwd替换为空.g表示是全局替换(但是只读入了一行,一行的全局)
    
a在行后追加文本 ( 追加内容都可以使用转义字符  如 \n \t)
    格式: sed "3,6a ==="在3-6 行后分别增加 ===
          sed "3,6a\ ===="等价
          a\声明后面是增加的字符串,所以可以有空格(会被认为空格也是需要增加的内容)

i在行前增加文本
	格式: 同上
	
= 打印匹配行的行号
	格式: sed "3,6=" 打印3-6行的行号
	
! 对前面匹配的行的结果取反  
    (即匹配的行取反为不匹配的,不匹配的取反为匹配的)
    格式: sed "3,6!p" 取反3-6行(即就不匹配3-6行,这是最终结果,现
    
n 读取当前行的下一行覆盖模式空间
N 读取当前行的下一行追加模式空间
h 将模式空间中的内容覆盖至保持空间
H 将模式空间中的内容追加至保持空间
g 将保持空间的内容覆盖至模式空间
G 将保持空间的内容追加至模式空间
x 将模式空间的内容与保持空间进行互换
D:删除当前模式空间开端至\n的内容(即第一行),然后进行判断,模式空间是否为空,不为空则,则放弃之后的命令,执行D之前的命令(相当于进入循环体,模式空间为空时循环退出),如果为空,则(截断重新执行也好,执行后续命令也好,模式空间都删空了,后续命令范围无法匹配),则继续读取下一行(计数器,指针什么的为标准)重新执行(处理新的一行,不是重新处理文本).

当使用保持空间达到效果时,思考方式应该是先思考模式空间与保持空间如何进行交换,然后在使用命令实现.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值