Linux三剑客之一sed用法

sed是一种流编辑器,主要针对文本行进行处理,它一次处理一行内容。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。然后读入下行,执行下一个循环。如果没有使诸如‘D’的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间。这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。

主要功能为主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。

工作原理:在内存中申请两个个空间,分别叫做模式空间和保持空间,基本用法采用模式空间进行对每一个行进行处理,利用用户定义的pattern对读取到模式空间的每一进行处理并将处理结果默认打印到屏幕。高级用法使用模式空间和保持空间共同处理完成高级作业。

Sed的基本语法为sed [option]scripts file,具体选项、地址定界、编辑命令和处理目标文件等,另外sed取字段或其他内容时,通常采用分组替换思路解决问题,具体如下所示:


命令


选项


Scripts


File


Sed


[nefri]


地址定界


编辑命令


目标文件

选项介绍:

-n:关闭命令本身默认输出的内容,仅输出经过利用用户自定义的pattern进行对pattern空间处理每一个行文本后的动作,即地址定界+编辑命令的结果。

-e:多点编辑,同时可以多每一行进行多次编辑

-f:从指定文件中读取编辑脚本

-r:启用扩展正则表达式

-i.bak:备份文件并原处编辑

实例演示:-n关闭默认输出的信息


[[email protected]  ~]#ifconfig ens33|sed ‘/netmask/p‘  #验证默认输出+模式匹配动作

ens33:  flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

inet 192.168.100.129  netmask 255.255.255.0  broadcast 192.168.100.255

inet 192.168.100.129  netmask 255.255.255.0  broadcast 192.168.100.255

inet6 fe80::20c:29ff:fecf:ed55  prefixlen 64  scopeid 0x20<link>

ether 00:0c:29:cf:ed:55  txqueuelen 1000  (Ethernet)

RX packets 16075  bytes 1508980 (1.4 MiB)

RX errors 0  dropped 0   overruns 0  frame 0

TX packets 12329  bytes 2347525 (2.2 MiB)

TX errors 0  dropped 0 overruns 0  carrier 0   collisions 0

[[email protected]  ~]#ifconfig ens33|sed -n ‘/netmask/p‘ #验证关闭默认输出

inet 192.168.100.129  netmask 255.255.255.0  broadcast 192.168.100.255

[[email protected]  ~]#sed -i ‘/SELINUX=/c\SELINUX=disabled‘ /etc/selinux/config

[[email protected]  ~]#cat /etc/selinux/config  #利用sed关闭selinux

#  This file controls the state of SELinux on the system.

SELINUX=disabled

#     enforcing - SELinux security policy is  enforced.

#     permissive - SELinux prints warnings  instead of enforcing.

#     disabled - No SELinux policy is loaded.

SELINUX=disabled

#  SELINUXTYPE= can take one of three two values:

#     targeted - Targeted processes are  protected,

#     minimum - Modification of targeted  policy. Only selected processes are protected.

#     mls - Multi Level Security protection.

SELINUXTYPE=targeted

[[email protected]  ~]#sed -n -e ‘/^root\>/p‘ -e ‘s/root/rooter/gp‘ p

root:x:0:0:root:/root:/bin/bash                #第一个e是全文匹配出来以root开

rooter:x:0:0:rooter:/rooter:/bin/bash           行打印出来头的

operator:x:11:0:operator:/rooter:/sbin/nologin  #第二个e是全文再次搜索替换

#在有两个e时,每一个e都是对全文进行操作

ifconfig  ens33|sed -n -e ‘2s/^.*inet //‘ -e ‘2s/ .*$//p‘

192.168.100.129                       #此时同时对第2行进行模式处理并打印

命令ifconfig ens33本身默认有信息在屏幕上输出,另外文本的每一行逐一被调度到模式空间中被定义的‘/netmask/p‘处理,pattern匹配到有netmask的行打印,故实例中匹配到netmask行显示两行,其中1行是默认输出的信息,另外一行是经过pattern处理后打印出的信息。如若关闭默认输出时,则只显示pattern处理的信息。

   地址定界:


地址定界


含义


不给地址


对全文进行处理


单地址


#


指定的行


/pattern/


被此处模式所能匹配到的每一行


地址范围


#,#


从多少行到多少行


#,+#


从多少行到加多少行


/part/,/part/


从模式所匹配到的行再到模式匹配到的行(文本中的每一行都要进入模式空间进行处理)


#,/part/


从多少行到模式所能匹配到的行


~进步


1~2


从第一行+2行,依次类推一直向上叠加,即显示奇数行


2~2


从第二行+2行,依次类推一直向上叠加,即显示偶数行

编辑命令:


D


删除模式空间匹配到的行,并立即进入下一轮的循环


P


打印当前模式空间内容,追加到默认输出之后


a[\]text


指定行后面追加文本,支持使用\n实现多行追加


i[\]text


指定行前面追加文本,支持使用\n实现多行追加


c[\]text


替换模式匹配到的行


w/path/somefile


保存模式匹配到的行到某文件


r/path/somefile


读取文件指定的行到模式空间进行处理


=


打印模式匹配到行的行号



模式空间中匹配行取法处理


s///,[email protected]@@,s###


查找替换,如s/1234/abcd/,查找到1234替换为abcd,


替换标记g:全局替换 p;打印替换成功的行 w/path/TO/somefile 保存替换的行到文件中

实例演示:


[[email protected] ~]#sed -n  ‘/^root\>/s/^/#/p‘ /etc/passwd

#root:x:0:0:root:/root:/bin/bash #对正则表达式匹配出来后进行进行增加#注释

[[email protected] ~]#sed -rn ‘s/(^root)/\101/p‘  p

root01:x:0:0:root:/root:/bin/bash#利用扩展正则表达式对文本进行搜索替换

[[email protected] ~]#sed -i.bak ‘/^# Source/i\alias  vname="vim /etc/sysconfig/network"‘ .bashrc   #利用正则表达式在# Source开头的行前添加别名

[[email protected] ~]#cat .bashrc     #验证说明可以实现此项功能

# .bashrc

# User specific aliases and functions

alias rm=`echo rm can not use`

alias cp=‘cp -i‘

alias vname="vim /etc/sysconfig/network"

# Source global definitions

if [ -f /etc/bashrc ]; then

.  /etc/bashrc

fi

[[email protected] ~]#sed -i.bak ‘2i\This is my  alias name‘ .bashrc

[[email protected] ~]#cat .bashrc     #在第2行前增加注释

# .bashrc

This is my alias name

# User specific aliases and functions

alias vname="vim  /etc/sysconfig/network"

descript good

# Source global definitions

alias vname="vim  /etc/sysconfig/network"

if [ -f /etc/bashrc ]; then

.  /etc/bashrc

Fi

[[email protected] ~]#ifconfig ens33|sed -e  ‘2!d;s/.*inet //;s/ .*$//‘

192.168.100.129           #封号表示顺序执行,除第2行的删除继续pattern处理

取父目录名或取基名,选组1则是父目录名,选组2则是基名

[[email protected]  /media/Packages]#ls |sed -r -n ‘s/^.*[.]([^.]+).rpm/\1/p‘|sort|uniq –c                                                  #取镜像中.rpm包的分类个数

2000 i686

2938 noarch

4069x86_64

[[email protected] /media/Packages]#cat/etc/init.d/functions | sed -r ‘s/[^[:alpha:]]+/\n/g‘|sort|uniq –c  #取文件中的单词个数,思路是:非单词换行最后统计

时间: 2024-12-13 06:45:44

Linux三剑客之一sed用法的相关文章

linux三剑客之sed史上最实用教程!

2016老男孩教育的官方博客干货不断,敬请关注! linux三剑客之sed史上最实用教程!猛戳下面地址即可观看! http://blog.oldboyedu.com/commands-sed/

不看绝对后悔的Linux三剑客之sed实战精讲

二.Linux三剑客之sed命令精讲 1,前言 我们都知道,在Linux中一切皆文件,比如配置文件,日志文件,启动文件等等.如果我们相对这些文件进行一些编辑查询等操作时,我们可能会想到一些vi,vim,cat,more等命令.但是这些命令效率不高,这就好比一块空地准备搭建房子,请了10个师傅拿着铁锹挖地基,花了一个月的时间才挖完,而另外一块空地则请了个挖土机,三下五除二就搞定了,这就是效率.而在linux中的"挖土机"有三种型号:顶配awk,中配sed,标配grep.使用这些工具,我们

深入浅出linux三剑客之sed必杀技一例

转 http://oldboy.blog.51cto.com/2561410/949365 缘起:上完培训课后,同学们对sed加正则处理问题的热情高涨,氛围相当好,但是,有个别同学还是有些晕乎,因此,撰写此文.此例如果搞熟练了,sed和正则的大部分常用技术你掌握起来就简单了. 如果还有不会的,老男孩就拿出最后的讲解必杀技(先保密,嘿!),同学们想不会那是不可能的,除非你们自己主动放弃,哈哈.来,开整~! 老男孩linux培训第三节课程课前第考试一题,问题如下 1.如何取得/etiantian文件

Linux三剑客之sed命令

选定行的范围:,(逗号) 删除操作:d命令 显示模式空间内容 追加(行下):a\命令 插入(行上):i\命令 退出:q命令 多点编辑:e命令 从文件读入:r命令 写入文件:w命令 替换操作:s命令 替换文本中的字符串: 全面替换标记g 保持和获取:h命令和G命令 保持和互换:h命令和x命令 sed 简介 sed 工作原理 命令格式 常用选项: 地址定界: 编辑命令: 替换标记: sed元字符集(正则表达式) 高级编辑命令: sed用法实例 作业: 作业: sed命令 sed 简介 Stream

Linux三剑客之sed的基本用法介绍

[介绍] sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法. [常用选项] -e 下一个参数为一个sed指令,一般只会用于同一行有多个sed的时候 -f 后面跟保存了sed指令的文件 -i 直接对内容进行修改,不加i时只是预览,并不做实际改动 -n 取消默认输出,只输出处理过的行. [编辑命令] a 追加·向匹配行后面插入内容 c 更改·更改匹配行的内容 i 插入·向匹配行前插入内容 d 删除·删除匹配的内容 s 替换·替换匹配到的

linux三剑客命令基本用法汇总

linux中非常重要的三个命令 grep sed awk 结合正则表达式,可以发挥强大的功能. 正则表达式 正则表达式由以下内容组合而成: 普通字符,例如空格.下划线.A-Z.a-z.0-9. 可以扩展为普通字符的元字符,它们包括: (.) 它匹配除了换行符外的任何单个字符. (*) 它匹配零个或多个在其之前紧挨着的字符. [ character(s) ] 它匹配任何由其中的字符/字符集指定的字符, 你可以使用连字符(-)代表字符区间,例如 [a-f].[1-5]等. ^ 它匹配文件中一行的开头

Linux三剑客之sed基本应用

sed:三剑客之第二实现对文件的增加 删除 修改 查询 过滤命令格式:sed 选项 sed内置命令 文件-i-e-naidpsg创建文件tobedu.txt,输入内容,并以此文件为例.[[email protected] ~]# cat -n tobyedu.txt 1 I am toby teacher!2 I like badminton ball ,billiard ball and chinese chess!3 our site is tobyedu.com4 5 my qq num

Linux三剑客grep/sed/awk

grep/sed/awk被称为linux的“三剑客” grep更适合单纯的查找或匹配文本: sed更适合编辑匹配到的文本: awk更适合格式化文本,对文本进行较复杂各式处理: Grep --color=auto 或者 --color:表示对匹配到的文本着色显示 -i:在搜索的时候忽略大小写 -n:显示结果所在行号 -c:统计匹配到的行数,注意,是匹配到的总行数,不是匹配到的次数 -o:只显示符合条件的字符串,但是不整行显示,每个符合条件的字符串单独显示一行 -v:输出不带关键字的行(反向查询,反

linux三剑客之sed

sed命令是一个功能强大的流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,它会把当前处理的文本的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着sed命令会处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,直到文件末尾.需要注意的是,处理前后文件内容并没有改变,除非你使用重定向存储输出或使用特定的选项. 1.使用格式 sed [option] 'AdressCommand' FILE... 2.