三剑客之sed

sed基本用法:

sed: Stream EDitor

行编辑器 (全屏编辑器: vi)

sed: 模式空间

默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;

sed [options] ‘AddressCommand‘ file ...

-n: 静默模式,不再默认显示模式空间中的内容

-i: 直接修改原文件

-e SCRIPT -e SCRIPT:可以同时执行多个脚本

-f /PATH/TO/SED_SCRIPT

sed -f /path/to/scripts  file

-r: 表示使用扩展正则表达式

Address:

1、StartLine,EndLine

比如1,100

$:最后一行

2、/RegExp/

/^root/

3、/pattern1/,/pattern2/

第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

4、LineNumber

指定的行

5、StartLine, +N

从startLine开始,向后的N行;

Command:

d: 删除符合条件的行;

p: 显示符合条件的行;

a \string: 在指定的行后面追加新行,内容为string

\n:可以用于换行

[[email protected] ~]# sed ‘1a \###\nfushanhua‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

###

fushanhua

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# sed ‘1,3a \###\nfushanhua‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

###

fushanhua

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

###

fushanhua

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

###

fushanhua

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

i \string: 在指定的行前面添加新行,内容为string

r FILE: 将指定的文件的内容添加至符合条件的行处

[[email protected] ~]# sed ‘1r /etc/issue‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

CentOS release 6.7 (Final)

Kernel \r on an \m

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# sed ‘1,3r /etc/issue‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

CentOS release 6.7 (Final)

Kernel \r on an \m

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

CentOS release 6.7 (Final)

Kernel \r on an \m

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

CentOS release 6.7 (Final)

Kernel \r on an \m

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# sed ‘$r /etc/issue‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

CentOS release 6.7 (Final)

Kernel \r on an \m

w FILE: 将地址指定的范围内的行另存至指定的文件中;

[[email protected] ~]# sed ‘$w /tmp/zui.txt‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# cat /tmp/zui.txt

proc                    /proc                   proc    defaults        0 0

s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串

加修饰符

g: 全局替换

i: 忽略字符大小写

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

\(\), \1, \2

l..e: like-->liker

love-->lover

like-->Like

love-->Love

&: 引用模式匹配整个串

[[email protected] tmp]# sed ‘s#l..e#&r#g‘ zui.txt

hello ,liker

hi,my lover

[[email protected] tmp]# sed ‘s#\(l..e\)#\1r#g‘ zui.txt

hello ,liker

hi,my lover

[[email protected] tmp]# sed ‘s#\(l..e\)#\1\n#g‘ zui.txt

hello ,like

hi,my love

[[email protected] tmp]# sed ‘s#\(l..e\)#\1.#g‘ zui.txt

hello ,like.

hi,my love.

[[email protected] tmp]# sed ‘s#l\(..e\)#L\1#g‘ zui.txt

hello ,Like

hi,my Love

sed练习:

1、删除/etc/grub.conf文件中行首的空白符;

sed -r ‘[email protected]^[[:spapce:]][email protected]@g‘ /etc/grub.conf

2、替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;

sed ‘[email protected]\(id:\)[0-9]\(:initdefault:\)@\15\[email protected]‘ /etc/inittab

3、删除/etc/inittab文件中的空白行;

sed ‘/^$/d‘ /etc/inittab

4、删除/etc/inittab文件中开头的#号;

sed ‘[email protected]^#@@g‘ /etc/inittab

5、删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;

sed -r ‘[email protected]^#[[:space:]][email protected]@g‘ /etc/inittab

6、删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#

sed -r ‘[email protected]^[[:space:]]+#@@g‘ /etc/inittab

7、取出一个文件路径的目录名称;

echo "/etc/rc.d/" | sed -r ‘[email protected]^(/.*/)[^/]+/[email protected]\[email protected]‘

基名:

echo "/etc/rc.d/" | sed -r ‘[email protected]^/.*/([^/]+)/[email protected]\[email protected]‘

#abc

# hello world

# hi world

练习:

传递一个用户名参数给脚本,判断此用户的用户名跟其基本组的组名是否一致,并将结果显示出来。

练习例子:(/etc/fstab)

Address:

1、StartLine,EndLine

比如1,100

$:最后一行

[[email protected] ~]# sed -n 1,3p /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

[[email protected] ~]# sed -n 1,3d /etc/fstab

[[email protected] ~]# sed  1,3d /etc/fstab

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

2、/RegExp/

/^root/

[[email protected] ~]# sed -r -n ‘/^#|^$/p‘ /etc/fstab

#

# /etc/fstab

# Created by anaconda on Tue May 31 07:30:11 2016

#

# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘

# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info

#

3、/pattern1/,/pattern2/

第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行

[[email protected] ~]# sed  -n ‘/devpts/,/proc/p‘ /etc/fstab

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# sed   ‘/devpts/,/proc/d‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

4、LineNumber

指定的行

[[email protected] ~]# sed  -n  ‘$p‘ /etc/fstab

proc                    /proc                   proc    defaults        0 0

[[email protected] ~]# sed  -n  ‘5p‘ /etc/fstab

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

5、StartLine, +N

从startLine开始,向后的N行;

[[email protected] ~]# sed ‘2,+2p‘ /etc/fstab

/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

UUID=a502aad2-4118-48be-bf98-f1660bab1c1e /boot                   ext4    defaults        1 2

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

tmpfs                   /dev/shm                tmpfs   defaults        0 0

devpts                  /dev/pts                devpts  gid=5,mode=620  0 0

sysfs                   /sys                    sysfs   defaults        0 0

proc                    /proc

经典案例:

sed 取接口IP地址:

[[email protected] ~ 18:50:47]$ ifconfig eth0

eth0      Link encap:Ethernet  HWaddr 90:B1:1C:47:A7:E8

inet addr:192.168.0.35  Bcast:192.168.0.255  Mask:255.255.255.0

inet6 addr: fe80::92b1:1cff:fe47:a7e8/64 Scope:Link

UP BROADCAST RUNNING MULTICAST  MTU:1496  Metric:1

RX packets:5096955365 errors:0 dropped:104 overruns:0 frame:0

TX packets:5128482803 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:2361903276011 (2.1 TiB)  TX bytes:2114718154002 (1.9 TiB)

Interrupt:35

[[email protected] ~ 18:49:28]$ ifconfig eth0|sed -r -n ‘s#^.*addr:(.*)  Bca.*$#\1#g‘

[[email protected] ~ 18:49:54]$ ifconfig eth0|sed -r -n ‘s#^.*addr:(.*)  Bca.*$#\1#gp‘

192.168.0.35

[[email protected] ~ 18:49:59]$ ifconfig eth0|sed -r -n ‘s#^.*addr:(.*)  Bca.*$#\1#g‘p

192.168.0.35

时间: 2024-11-06 19:08:00

三剑客之sed的相关文章

三剑客之 sed详解

    sed 作者:Jack.X 归档:学习笔记 2017/4/13 三剑客之sed 第1章 sed详解: 1.1 sed介绍: sed是linux命令中三剑客的老二,sed命令是操作.过滤和转换文本内容的强大工具,常用功能有增删改查(增加,删除,修改,查询).其中查询的功能中最常用的两大功能是过滤(过滤指定字符串),取行(取出指定行). 我先在用的sed版本是GNU开源版本的,实验环境是Centos6.8系统,内核是2.6.32-642.el6.x86_64 [[email protecte

文本处理三剑客之sed

文本处理三剑客之sed sed概述 sed使用示例 sed的高级应用 sed概述 sed, 作为文本三剑客之一,其定位就是一个编辑器, 而且sed是一个流式编辑器(stream editor),其主要功能是过滤和转换文本. sed - stream editor for filtering and transforming text 作为一个强大的文本处理功能,sed 自然能够配合正则表达式,另外,所谓流编辑器,sed 是逐行地读取文本,在文本行中应用指定的命令,且默认输出到stdout; se

文本处理三剑客之sed(流编辑器)

文本处理三剑客之sed(流编辑器) - 行编辑器 把当前处理的行存储在临时缓冲区,称为模式空间,然后把模式空间的内容送往屏幕,一行一行的处理,主要用来编辑一个或者多个文件. - 用法 sed [option]... 'script' inputfile... ###### - 常用选项 -n:不输出模式空间内容到屏幕,即不自动打印 默认会打印模式空间的内容加-n 可以只显示需要打印的行 [root@localhost home]# sed -n '2,3p' /etc/passwd bin:x:

8.9_Linux文本处理三剑客之sed和文本编辑利器vim的使用

本文处理三剑客之sed的使用   什么是sed? Stream EDitor(简称sed), 行编辑器,一次只读一行,只处理一行,不对源文件做处理,至输出到屏幕上. sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重定向存储输出.sed主要用来自动编辑一个或多

Linux文本处理“三剑客”之sed

sed(Stream Editor)是一个行编辑工具.下面我们介绍 sed 的实现原理和基本使用方法. 一.sed 的处理文本的流程 基本处理流程如下: 处理流程是:每次读入文本文件的一行到内存中的模式空间中,在模式空间中处理后将处理的结果输出,默认会打印到屏幕上.因此,默认情况下,不会改变原文件的内容. 二.sed 命令的使用 基本语法:sed [options]... '地址定位 编辑命令' FILE... 地址定位的方法: 1.行定位: start_line[,end_line] 2.模式

文本工具三剑客:sed

文本工具三剑客:sedsde是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓存区,称为 模式空间    用法:    sed [选项] [加自己的语言] [要处理的文件]    选项:        -n  不输出模式中的内容至屏幕            # sed -n "10p" f2 只打印出第10行匹配到的行 其他不显示            10  UUID=07a475f4-3d7a-4b27-9ec9-500bc8a19c4d /boot      

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文件

三剑客之SED行天下

三剑客之SED行天下 3个月前 (02-16) 老男孩 Linux命令 9评论 来源:本站原创 2222℃ 字体:小中大 功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. [[email protected] ~]# sed --version #→ sed软件版本 GNU sed version 4.2.1 语法格式 sed [options] [sed-commands] [input-file] sed [