Chinaunix首页 | 论坛 | 博客
  • 博客访问: 348233
  • 博文数量: 45
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 885
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-06 21:07
个人简介

做好自己,不卑不亢,持之以恒!!

文章分类

全部博文(45)

分类: 系统运维

2016-03-03 23:28:30

        1.Sed简介:

    Sed是一个很好的文件红醋栗工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据进行替换,删除,新增,选取等工作。它不会修改文件,除非使用shell重定向来保存结果。默认情况下,所有的输出行都被打印到屏幕上。

    具体过程如下:首先sed把当前正在处理的行保存在一个临时缓存区中(也称为模式空间),然后处理临时缓冲区中的行,完成后把该行发送到屏幕上。sed每处理完一行就将其从临时缓冲区删除,然后将下一行读入,进行处理和显示。处理完输入文件的最后一行后,sed便结束运行。sed把每一行都存在临时缓冲区中,对这个副本进行编辑,所以不会修改原文件。

 

Sed命令格式:

sed [-nefri]  ‘command’  输入文本

2.命令与选项:

sed命令告诉sed如何处理由地址指定的各输入行,如果没有指定地址则处理所有的输入行。

2.1. Sed命令

命令

                         功能

a

在当前行后添加一行或者多行,多行使用\n连接继续

c

用此符号后的新文本替换当前行中的文本

i

在当前行之前插入文本

d

删除行

h

把模式空间里的内容复制到暂存缓冲区

H

把模式空间里的内容追加到暂存缓冲区

g

把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容

G

把暂存缓冲区的内容追加到模式空间里,追加在原有内容的后面

I

列出非打印字符

p

打印行

n

读入下一输入行,并从下一条命令而不是第一条命令开始对其的处理

q

结束或退出sed

r

 从文件中读取输入行

!

对所选行以外的所有行应用命令

s

用一个字符串替换另一个

g

 在行内进行全局替换

w

将所选的行写入文件

x

交换暂存缓冲区与模式空间的内容

y

将字符替换为另一字符(不能对正则表达式使用y命令)

 

2.2 sed选项:

选项

                           功能

-e

进行多项编辑,即对输入行应用多条sed命令时使用

-n 

 取消默认的输出

-f

 指定sed脚本的文件名

3: 退出状态

sed不向grep一样,不管是否找到指定的模式,它的退出状态都是0。只有当命令存在语法错误时,sed的退出状态才不是0

4:正则表达式元字符

元字符

功能

示例

^

行首定位符

/^#/匹配所有以”#”开头的行

$

行尾定位符

/s$/匹配所有以”s”结尾的行

*

匹配零个或多个前导字符

/str*/匹配包含字母st,后跟零个或多个r字母的行

[]

匹配不再指定字符组内的任一字符

/[st]r/匹配包含srtr的行

[^]

匹配不再指定字符组内的任一字符

[^st]r匹配包含r,r前的那个字符不是s也不是t

&

保存查找串以便在替换串中引用

s/str/**&**/ 符号&代表串,str将被替换为**str**

\<

词首定位符

/\匹配包含以str开头的单词的行

\>

词尾定义符

/\>ing/匹配以ing结尾的单词的行

x\{n\}

连续nx

/x\{3\}/ 匹配包含连续3x的行

X\{n,\}

至少nx

/x\{3,\}/  匹配包含至少连续3x的行

X\{m,n\}

至少m个,但不超过nx

 /x\{5,7\}/  匹配包含连续57x的行

 

举例:(以test文件为例)

删除某行:

# sed '1d' test   #删除第一行

# sed '$d' test   #删除最后一行

# sed '1,2d' test #删除第一行和最后一行

# sed '2,$d' test #删除第二行到最后一行

# sed '/Hello/,/end/d' test #删除包含”Hello”的行到包含“end”的行之间的行

# sed '/Hello/,4d' test    #删除包含“Hello”的行到第十行的内容

显示某行:

# sed -n '1p' test #显示第一行

# sed -n '$p' test #显示最后一行

# sed -n '1,2p' test #显示第一行和第二行

# sed -n '2,$p' test #显示第二行到最后一行

使用模式进行查询:

# sed -n '/hello/p' test  #查询关键字hello所在的所有行

# sed -n '/\$/p' test     #查询包括关键字$所在所有行,使用反斜线\转义特殊字符

增加一行或者多行字符串:

# cat test 

Hello

Welcom to learn linux

end

 

# sed '1a add a string' test  #第一行后增加字符串”add a string”

Hello

add a string

Welcom to learn linux

end

 

# sed '1,3a add another string' test  #第一行到第三行后增加字符串‘add another string’

Hello

add another string

Welcom to learn linux

add another string

end

add another string

 

# sed '1a the other\nstring' test  #第一行后增加多行,使用换行符\n

Hello

the other

string

Welcom to learn linux

end

 

替换一行中的某部分:

# sed -n '/Hello/p' test | sed 's/Hello/HELLO/g' test #替换HelloHELLO

# sed -n '/Hello/p' test | sed 's/Hello//g' test  #删除Hello

# sed -i '$a bye' test  #在文件最后一行直接输入“bye”

# cat test 

Hello

Welcom to learn linux

end

bye

# sed 's#My#Your#g' test

#紧跟在s命令后的字符就是查找串和替换串之间的分隔符。分隔符默认为正斜杠,但可以改变。无论什么字符(换行符、反斜线除外),只要紧跟s命令,就成了新的串分隔符。

 

阅读(2450) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~