网络三剑客之sed

目录

一、sed是什么

二、sed为什么这样工作(原理)

三、sed命令该怎么操作

3.1 基本的操作选项

3.2 怎么去使用sed

3.3 操作实例

3.3.1 打印输出(-n、-p、-r)

3.3.2 增加内容(i、a)

3.3.3 删除(d)

3.3.4 替换(替换的内容前加c)

3.3.5 搜素替换(s、g、p)

3.3.6 插入文件(r)

3.3.7 另存为到文件(w +路径)

3.3.8 同时编辑(-e)

3.3.9 分组操作{}

3.3.10 读取完退出(q)

3.3.11 sed脚本

3.3.12 sed的高级应用

3.3.13 扩展


一、sed是什么

  • 目的:sed 命令是利用脚本来处理文本文件。
  • 原因:它可以依照脚本的指令来处理、编辑文本文件
  • 范围:主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等

二、sed为什么这样工作(原理)

  • 文本:sed编辑器处理一段文本时,首先会逐行进行处理,也就是说每次只读取一行内容
  • 模式空间:接着将读取的内容保存在一个临时缓存区中,这个缓存区叫做模式空间
  • 屏幕输出:然后根据预先提供的规则命令匹配并修改数据;再将该行输出到屏幕上并清空模式空间
  • 继续处理:sed处理完一行数据后,会继续处理下一行,不断重复这个过程,直到将文件中的所有数据处理完毕

注:sed把每一行都保存在模式空间中,对这个副本进行修改,所以默认不会修改或破坏源文件

三、sed命令该怎么操作

3.1 基本的操作选项

基本格式:

sed [选项] '操作' 参数

sed [选项] -f scriptfile 参数

常见sed命令选项
-e表示用指定命令或者脚本来处理输入的文本文件
-f表示用指定的脚本文件来处理输入的文本文件
-h显示帮助
-n表示仅显示处理后的结果
-i直接编辑文本文件
-r使用扩展正则表达式
-s将多个文件视为独立文件,而不是单个连续的长文件流
常见sed命令操作
a增加:在当前行下面增加一行指定内容
c替换:将选定行替换为指定内容
d删除:删除选定的行
i插入:在选定行上面插入一行指定内容
p

打印:

  • 如果同时指定行,表示打印指定行
  • 如果不指定行,则表示打印所有内容
  • 如果有非打印字符,则以 ASCII 码输出
  • 其通常与“-n”选项一起使用
s替换:指定字符
y字符转换

3.2 怎么去使用sed

sed             [option]...                    'script;script;...'                         [input file...]

                   选项                            自身脚本语法                          支持标准输入管道

  • options指的是sed的命令行参数
  • script是指需要对输入执行的一个或者多个操作指令,一般需要用单引号括起来,这样可以避免shell对 特殊字符的处理。sed会依次读取输入文件的每一行到缓存中并应用script中指定的操作指令,因此而带 来的变化并不会影响最初的文件(除非option加了-i参数
  • 每条操作指令由pattern和procedure两部分组成,顾名思义,pattern是匹配的规则,一般为用’/'分隔的 正则表达式(也有可能是行号,具体参见Sed命令地址匹配问题总结),而procedure则是一连串编辑命 令(action)

总结:sed命令+选项 ‘定位+动作+内容’ 文件名

3.3 操作实例

3.3.1 打印输出(-n、-p、-r)

  • 如何显示范围行号,行号

  • 奇偶数表示

  • 特殊符号表示打印($、[0-9]、!、=)

  • sed默认不支持扩展正则,如果要支持,需要加-r选项

  • 结合管道符号

3.3.2 增加内容(i、a)

注意:a或i所有内容都会被理解为需要添加的内容

3.3.3 删除(d)

3.3.4 替换(替换的内容前加c)

c指令使得整行内容全部替换

 注意:这里没有真的改变文件内容,只是输出到屏幕,如果想要真的替换,需要用-i选项,建议用-i之前对原文 件进行备份

3.3.5 搜素替换(s、g、p)

语法

s/……/……/修饰符

查找替换,支持使用其它分隔符,可以是其它形式:s@@@,s###

替换修饰符:

g:行内全局替换

p:显示替换成功的行

w /PATH/FILE:将替换成功的行保存至文件中

I,i:忽略大小写

注:把所有/sbin/nologin换成kgc,/需要转义

注:以sync开头的行并且前面加#号,那就需要保留sync,那就要把搜索的字符写成&

  • 忽略大小写的替换

  • 生产案例

3.3.6 插入文件(r)

3.3.7 另存为到文件(w +路径)

  • 追加,不进行覆盖

3.3.8 同时编辑(-e)

3.3.9 分组操作{}

当我们需要对一行数据进行多次操作的时候我们可以使用{}进行分组

  • 分组 s//代表查找替换
  • ()代表分组
  • \1 代表留下的组
  • r:读取指定文件

从 ifconfig 命令的输出中提取 ens33 网卡的 IP 地址

通过 sed 的正则表达式匹配,它会找到 包含 inet 字段的行,并从中提取出 IP 地址部分,然后输出这个 IP 地址

3.3.10 读取完退出(q)

3.3.11 sed脚本

使用 sed 命令迁移符合条件的文本时,常用到以下参数.

  • H:复制到剪贴板
  • g、G:将剪贴板中的数据覆盖/追加至指定行
  • w:保存为文件
  • r:读取指定文件
  • a:追加指定内容
  • I,i 忽略大小写

注意:

  • sed脚本文件第一行要声明#!/bin/sed -f
  • 不要加单引号
  • 每行的最后不能有空格等多余字符
  • #号开头为注释
  • 一行有多个命令时用分号隔开
  • sed的返回值一般情况为0,不管是不是修改成功了,除非是语法错误 所以sed的返回值$?一般不作为sed成功的判断条件

脚本一:

3.3.12 sed的高级应用

  • -r匹配正则

  • 结合变量使用

3.3.13 扩展

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值