Linux三剑客之sed命令

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

作业:

sed命令

sed 简介

Stream EDitor, 行编辑器 
sed是一种流编辑器,它是文本处理中非常中的工具,能够完美的配合正则表达式使用,功能不同凡响。

sed 工作原理

处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。

命令格式

sed [options] ‘command‘ file(s) sed [options] -f scriptfile file(s)

常用选项

-n :不输出模式空间内容的自动打印-e:  多点编辑-f / PATH/TO/SCRIPT_FILE :  从指定文件中读取编辑脚本-r:  支持使用扩展正则表达式-i:  原处编辑

地址定界:

(1)  不给地址:对全文进行处理(2)  单地址:    #:  指定的行    /pattern/ :被此处模式所能够匹配到的每一行(3)  地址范围:    #,#  (3,4 表示3-4行)    #,+#  (3,+4 表示3的基础加4行,也就是3-7行)    /pat1/,/pat2/  (从第一个指定的“定义”到指定的第二个“定义”)    #,/pat1/    (从第N行到指定的“定义”)(4) ~ :步进    1~2  奇数行    2~2  偶数行

编辑命令:

d: 删除模式空间匹配的行 
p: 显示模式空间中的内容 
a \text :在行后面追加文本;支持使用\n 实现多行追加 
i \text :在行前面插入文本;支持使用\n 实现多行插入 
c \text :替换行为单行或多行文本 
w /path/to/somefile: 保存模式匹配的行至指定文件 
r /path/from/somefile :读取指定文件的文本至模式空间中匹配到的行后 
=: 为模式空间中的行打印行号 
!: 模式空间中匹配行取反处理 
s///:查找替换, 支持使用其它分隔符,[email protected]@@ ,s###

替换标记:

g: 行内全局替换 
p: 显示替换成功的行 
w /PATH/TO/SOMEFILE :将替换成功的 行 保存至文件中 
x 表示互换模板块中的文本和缓冲区中的文本。 
y 表示把一个字符翻译为另外的字符(但是不用于正则表达式) 
\1 子串匹配标记 
& 已匹配字符串标记

sed元字符集(正则表达式)

^ 匹配行开始,如:/^sed/匹配所有以sed开头的行。 
$ 匹配行结束,如:/sed$/匹配所有以sed结尾的行。 
.匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。 
* 匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。 
[] 匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。 
[^] 匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。 
\(..\) 匹配子串,保存匹配的字符,如s/(love)able/\1rs,loveable被替换成lovers。 
& 保存搜索字符用来替换其他字符,如s/love/&/,love这成love。 
\< 匹配单词的开始,如:/\ 匹配单词的结束,如/love>/匹配包含以love结尾的单词的行。 
x\{m\} 重复字符x,m次,如:/0{5}/匹配包含5个0的行。 
x\{m,\} 重复字符x,至少m次,如:/0{5,}/匹配至少有5个0的行。 
x\{m,n\} 重复字符x,至少m次,不多于n次,如:/0{5,10}/匹配5~10个0的行。

高级编辑命令:

h: 把模式空间中的内容覆盖至保持空间中 
H:把模式空间中的内容追加至保持空间中 
g: 从保持空间取出数据覆盖至模式空间 
G :从保持空间取出内容追加至模式空间 
x: 把模式空间中的内容与保持空间中的内容进行互换 
n: 读取匹配到的行的下一行 覆盖 至模式空间 
N:追加匹配到的行的下一行至模式空间 
d: 删除模式空间中的行 
D :删除 当前模式空间开端至\n 的内容(不在传至标准输出),放弃之后的命令,但是对剩余模式空间重新执行sed

sed用法实例

选定行的范围:,(逗号)

所有在模板test和check所确定的范围内的行都被打印:

sed -n ‘/root/,/mageedu/p‘ /etc/passwd

打印从第5行开始到第一个包含以test开始的行之间的所有行:

sed -n ‘5,/^mageedu/p‘ /etc/passwd

对于模板mage和zhanghe之间的行,每行的末尾用字符串/bin/bash改成/sbin/nologin:

[root@localhost ~]# sed -i ‘/mage/,/zhanghe/[email protected]/bin/[email protected]/sbin/[email protected]‘ pw

删除操作:d命令

删除文件的1-16行

[[email protected] ~]# sed "1,16d" /etc/fstab proc                    /proc                   proc    defaults        0 0

删除开头是以#开头的行

[root@localhost ~]# sed ‘/^#/d‘ /etc/fstab

删除文件的第2行到末尾所有行:

[root@localhost ~]# sed ‘4,$d‘ /etc/fstab 

## /etc/fstab

删除所有以UUID开头的行

[root@localhost ~]# sed ‘/^UUID/d‘ /etc/fstab 

显示模式空间内容

[root@localhost ~]# sed -n ‘1,3p‘ /etc/fstab 

## /etc/fstab

追加(行下):a\命令

将 this is a test line 追加到 以UUID 开头的行后面:

[root@localhost ~]# sed ‘/^UUID/a\this is a test line‘ /etc/fstab

在 test.conf 文件第2行之后插入 #mageedu:

[root@localhost ~]# sed -i ‘2a\#mageedu‘ /etc/fstab

插入(行上):i\命令

将 this is a test line 追加到以test开头的行前面:

[root@localhost ~]# sed ‘/^test/i\this is a test line‘ file 

在test.conf文件第5行之前插入this is a test line:

[root@localhost ~]# sed -i ‘5i\this is a test line‘ test.conf

退出:q命令

打印完第10行后,退出sed

[root@localhost ~]# sed ‘10q‘ /etc/passwd

多点编辑:e命令

-e选项允许在同一行里执行多条命令:

sed -e ‘1,5d‘ -e ‘s/test/check/‘ file 

上面sed表达式的第一条命令删除1至5行,第二条命令用check替换test。命令的执行顺序对结果有影响。如果两个命令都是替换命令,那么第一个替换命令将影响第二个替换命令的结果。

从文件读入:r命令

将/etc/issue里面的内容在/etc/fstab第二行后面插入

[root@localhost ~]# sed -r ‘2r /etc/issue‘ /etc/fstab

写入文件:w命令

将/etc/fstab里面开头#除外的行写入/tmp/fstab.new里面去

[root@localhost ~]# sed -n ‘/^[^#]/w /tmp/fstab.new‘ /etc/fstab 

替换操作:s命令 替换文本中的字符串:

[root@localhost ~]# sed ‘s/book/books/‘ file

-n选项和p命令一起使用表示只打印那些发生替换的行:

[[email protected] ~]# sed -n ‘s/test/TEST/p‘ file 

直接编辑文件选项-i,会匹配file文件中每一行的第一个book替换为books:

[root@localhost ~]# sed -i ‘s/book/books/g‘ file

全面替换标记g

使用后缀 /g 标记会替换每一行中的所有匹配:

sed ‘s/book/books/g‘ file 

当需要从第N处匹配开始替换时,可以使用 /Ng:

echo sksksksksksk | sed ‘s/sk/SK/2g‘skSKSKSKSKSK echo sksksksksksk | sed ‘s/sk/SK/3g‘ skskSKSKSKSK

保持和获取:h命令和G命令

在sed处理文件的时候,每一行都被保存在一个叫模式空间的临时缓冲区中,除非行被删除或者输出被取消,否则所有被处理的行都将 打印在屏幕上。接着模式空间被清空,并存入新的一行等待处理。

sed -e ‘/test/h‘ -e ‘$G‘ file 

在这个例子里,匹配test的行被找到后,将存入模式空间,h命令将其复制并存入一个称为保持缓存区的特殊缓冲区内。第二条语句的意思是,当到达最后一行后,G命令取出保持缓冲区的行,然后把它放回模式空间中,且追加到现在已经存在于模式空间中的行的末尾。在这个例子中就是追加到最后一行。简单来说,任何包含test的行都被复制并追加到该文件的末尾。

保持和互换:h命令和x命令

互换模式空间和保持缓冲区的内容。也就是把包含test与check的行互换:

sed -e ‘/test/h‘ -e ‘/check/x‘ file

练习:

1 、删除/etc/grub2.conf 文件中所有以空白开头的行行首的 
空白字符

[root@localhost ~]# sed ‘[email protected]^[[:space:]]\[email protected]@g‘ /etc/grub.conf

2 、删除/etc/fstab 文件中所有以# 开头,后面至少跟一个空 
白字符的行的行首的# 和空白字符

[root@localhost ~]# sed ‘[email protected]^#[[:space:]]*@@‘ /etc/fstab

3 、在/root/install.log 每一行行首增加#号

[root@localhost ~]# sed -i ‘[email protected]^@#@g‘ install.log

4 、在/etc/fstab 文件中不以# 开头的行的行首增加#号

[root@localhost ~]# sed ‘[email protected]^[^#]@#@g‘ /etc/fstab

5 、处理/etc/fstab 路径, 使用sed 命令取出其目录名和基名

[root@localhost ~]# echo /etc/fstab | sed ‘[email protected][^/]\+/\[email protected]@‘/etc/[root@localhost ~]# echo /etc/fstab | sed ‘[email protected][^/]+/\[email protected]@‘/etc/fstab

6 、利用sed 取出ifconfig 命令中本机的IPv4 地址

[root@localhost ~]# ifconfig | sed -n 2p | sed -e ‘[email protected]*inet addr:@@‘ -e ‘[email protected]*@@‘10.1.252.97

7 、统计centos 安装光盘中Package 目录下的所有rpm 文件的以. 分隔倒数第二个字段的重复次数

[root@localhost Packages]# ls *.rpm | sed -r ‘[email protected]*\.(.*)[email protected]\[email protected]‘ |sort |uniq -c      4 i686    919 noarch   2283 x86_64

51cto博客:zhang789.blog.51cto.com

时间: 2024-08-25 11:01:53

Linux三剑客之sed命令的相关文章

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

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

〖Linux〗使用sed命令修改小端(little endian)存储的数据

1 #!/bin/bash - 2 #=============================================================================== 3 # 4 # FILE: hex_change.sh 5 # 6 # USAGE: ./hex_change.sh 7 # 8 # DESCRIPTION: 9 # 10 # OPTIONS: --- 11 # REQUIREMENTS: --- 12 # BUGS: --- 13 # NOTES:

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

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

Linux运维文本处理三剑客之sed命令

一· sed简介 与Vi等全屏编辑器不同,sed是一个非交互式的文本编辑器,它可以对文本文件和标准输入进行编辑,    标准输入可以来自键盘.文件重定向.字符串.变量,甚至来自管道的文本.sed是对文本中的行进行    逐行处理. sed只是对缓冲区中原始文件的副本进行编辑,并不编辑源文件.如何需要保存改动的内容,需要将输    出重定向到另一个文件,可以使用下面格式的命令: sed 'sed命令' input-file > result-file 二· sed调用的二种方式: 1.在shell

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

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

Linux三剑客及常用命令

要记住的符号: >2>> 2>&1 6.1 把 /data 移动到 /root目录下面#move mv [[email protected] ~]# mv /data/ /root/[[email protected] ~]# ls -l /datals: cannot access /data: No such file or directory[[email protected] ~]# ls -l /root/total 44-rw-------. 1 root ro

linux shell 用sed命令在文本的行尾或行首添加字符

from:http://www.cnblogs.com/aaronwxb/archive/2011/08/19/2145364.html 昨天写一个脚本花了一天的2/3的时间,而且大部分时间都耗在了sed命令上,今天不总结一下都对不起昨天流逝的时间啊~~~ 用sed命令在行首或行尾添加字符的命令有以下几种: 假设处理的文本为test.file 在每行的头添加字符,比如"HEAD",命令如下: sed 's/^/HEAD&/g' test.file 在每行的行尾添加字符,比如“T

linux三剑客之sed入门详解

sed介绍sed流编辑器(stream editor),在三剑客中排行老二,是一款简单的文本编辑语言.sed并不直接处理源文件,而是逐行读取源文件的内容到内存(称模式空间)中,然后在模式空间中使用sed命令处理,再打印模式空间处理后的内容到标准输出.sed的能够实现的功能:增删改查.替换.过滤.取行.sed文本处理原理图 sed命令的语法:sed [选项] 'AddressCommand [修饰符]'inputfile(输入文件)sed命令语法各参数解释 实验环境 [[email protect

Linux Shell编程 sed命令

概述 sed命令用来选取.替换.删除.新増数据 sed 是一种几乎可以应用在所有 UNIX 平台(包括 Linux)上的轻量级流编辑器.sed 有许多很好的特性.首先,它相当小巧,通常要比你所喜爱的脚本语言小多倍.其次,因为 sed 是一种流编辑器,所以,它可以对从如管道这样的标准输入中接收的数据进行编辑.因此,无须将要编辑的数据存储在磁盘上的文件中.因为可以轻易将数据管道输出到 sed,所以,将 sed 用作强大的 Shell 脚本中长而复杂的管道很容易.sed 主要是用来将数据进行选取.替换