Linux   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了流编辑器Sed大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

Sed简介 Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合于处理大数据文件。首先,Sed通过文件或管道读取文件内容,但Sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space),所有的指令操作都是在模@H_262_5@
@H_404_2@

Sed简介

Sed是一款流编辑工具,用来对文本进行过滤与替换操作,特别是当你想要对几十个配置文件做统一修改时,你会感受到Sed的魅力!Sed通过一次仅读取一行内容来对某些指令进行处理后输出,所以Sed更适合于处理大数据文件。首先,Sed通过文件或管道读取文件内容,但Sed认并不直接修改文件,而是将读入的内容复制到缓冲区中,我们称之为模式空间(pattern space),所有的指令操作都是在模式空间中进行的,然后Sed根据相应的指令对模式空间中的内容进行处理并输出结果,输出至标准输出(即屏幕上)。Sed工作流程如下图所示:

@H_674_28@@H_674_28@流编辑器Sed

Sed基本语法格式

Sed从文件中读取数据,如果没有输入文件,则认对标准输入进程数据进行处理,脚本指令是第一个非“-”开头的参数,具体语法格式如下。

用法:sed[选项]...{脚本指令} [输入文件]...
选项:--version         显示sed版本
   -h或--Help          显示帮助文档
   -n,--quiet,--silent  静输出认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容,该选项可以屏蔽自动打印

   -e script      允许多个脚本指令被执行
   -f script-file      从文件中读取脚本指令,对编写自动脚本程序很实用
   -i,-in-place     慎用,该选项将直接修改文件
   -l N         该选项指定l指令可以输出的行长度,l指令为输出非打印字符
   --posix      禁用GNU sed扩展功能
   -r          在脚本指令中使用扩展正则表达式
   -s,--separate    认情况下,sed将把输入的多个文件名作为一个长的连续的输入流。而GNU sed则允许把它们当作单独的文件
   -u,-unbuffered  最低限度的缓存输入与输出

Sed 入门范例
1.基本格式范例
Sed 通过特定的脚本指令对文件进行处理,这里就简单介绍几个脚本指令操作作为Sed程序的范例。a,append表示追加指令;i,insert表示插入指令;d,delete表示删除指令;s,substitution表示替换指令。sed脚本指令的基本格式是:[地址]命令(有些命令仅可以对一行操作,有些可以对多行操作),命令也可以用花括号进行组合,使命令序列可以作用于同一个地址。

address {

command1

command2

command3

}

注意:第一个命令可以和左花括号在同一行,但右花括号必须单独处于一行。此外,命令后添加空格会产生错误

Sed指令与脚本

1.Sed常用指令汇总
下表给出了常用的sed脚本指令的说明,下面分别看看每个指令的详细用法

指令 功能 指令 功能
s 替换 d 删除
a 追加 i 插入
c 更改 l 打印(显示非打印字符)
y 按字符转换 L 打印(不显示非打印字符)
p 打印 r 读入文件内容
w 保存至文件 q 退出

范例1

范例1所使用的样本文件为(注意有空白行):

[[email protected] ~]# cat test.txt
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static

Ipaddr=192.168.0.1
NETMASK=255.255.255.0

GATEWAY=192.168.0.254

范例1:删除文件中空白行

编写sed脚本为:

[[email protected] ~]# cat sed.sh
/.*/{
/^$/d
}

执行sed程序的结果如下:

[[email protected] ~]# sed -f sed.sh test.txt
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
Ipaddr=192.168.0.1
NETMASK=255.255.255.0
GATEWAY=192.168.0.254

 

范例2~范例5所使用的样本文件为:

[[email protected] ~]# cat test.txt
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
NETMASK=255.255.255.0
GATEWAY=192.168.0.254

范例2:在static行后添加一行,内容为Ipaddr=192.168.0.1

[[email protected] ~]# sed ‘/static/a Ipaddr=192.168.0.1‘ test.txt

范例3:在匹配NETMASK的行前插入内容Ipaddr=192.168.0.1

[[email protected] ~]# sed ‘/NETMASK/i Ipaddr=192.168.0.1‘ test.txt

范例4:将包含ONBOOT行的内容更改为ONBOOT=no

[[email protected] ~]# sed ‘/ONBOOT/c ONBOOT=no‘ test.txt

范例5:列印(l)显示模式空间中的内容显示非打印字符,一般与-n一起使用,否则会输出两次

[[email protected] ~]# sed -n ‘1,2l‘ test.txt    # 在sed脚本文件中,需要#n屏蔽自动输出

结果如下:

DEVICE=ens33$
ONBOOT=yes$

范例6:显示第一、二行的内容

打印(p):作用类似于l(列印),但不显示显示字符,一般与-n配合使用

[[email protected] ~]# sed -n ‘1,2p‘ test.txt

结果如下:
DEVICE=ens33
ONBOOT=yes

范例7:显示test.txt内容的前两行内容退出sed指令

[[email protected] ~]# sed ‘2q‘ test.txt

 

自,丁明一    编著    《Linux运维之道》

@H_404_2@

大佬总结

以上是大佬教程为你收集整理的流编辑器Sed全部内容,希望文章能够帮你解决流编辑器Sed所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。