码迷,mamicode.com
首页 > 其他好文 > 详细

sed 的用法

时间:2015-12-24 00:40:39      阅读:167      评论:0      收藏:0      [点我收藏+]

标签:sed 命令详解

sed概述:

    sed是一种流编辑器,是文本处理中非常重要的工具,能够完美的配合正则表达式使用。处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

使用格式:[root@linux ~]# sed [-nefr] [动作] sed [option]‘{ command}’datafile

常用的sed option

-e script 指定sed编辑命令

-f scriptfile 指定的文件中是sed编辑命令

-n 静默模式,抑制来自sed命令执行过程中的冗余输出信息,比如只显示那些被改变的行。

-i[SUFFIX], –in-place[=SUFFIX] 替换和备份源文件

参数p: 打印匹配行

# sed -n ’2p’/etc/passwd 打印出第2行

# sed -n ’1,3p’/etc/passwd 打印出第1到第3行

# sed -n ‘$p’/etc/passwd 打印出最后一行

# sed -n ‘/user/p’ /etc/passwd 打印出含有user的行

# sed -n ‘/\$/p’ /etc/passwd 打印出含有$元字符的行,$意为最后一行

# sed -n ‘$=’ ok.txt    打印总行数


参数a和i: 插入文本和附加文本(插入新行)


# sed -n ‘/FTP/p’/etc/passwd 打印出有FTP的行

# sed ‘/FTP/a\ 456′ /etc/passwd 在含有FTP的行后面新插入一行,内容为456

# sed ‘/FTP/i\ 123′ /etc/passwd在含有FTP的行前面新插入一行,内容为123

# sed ‘/FTP/i\ “123″’ /etc/passwd在含有FTP的行前面新插入一行,内容为”123″

# sed ’5 a\ 123′ /etc/passwd 在第5行后插入一新行,内容为123

# sed ’5 i\ “12345″’ /etc/passwd 在第5行前插入一新行,内容为”123表达式45″


sed-搜索结果后面增加嵌入代码


#!/bin/bash

#export LANG=zh_CN

find ./ -name “*.html” -exec grep 10000008/100 ‘{}’ \; -exec sed -i ‘/10000008/a\<\!--\# include file=\"\/code.html\"--\>‘ {} \;

#


参数d:删除文本 删空格


sed -i ‘s/[ ]*//g’ ~/$cid.txt

删除无内容空行


sed ‘/^$/d’ file.conf > file.new.conf

sed -i ‘/^$/d’ ~/$cid.txt

删第一行


sed -i ’1d’ ~/$cid.txt

删前两行


sed -i ’1,2d’ ~/$cid.txt

del多行


cat SCTP.log |sed ’1d;2d;$d’

删除最后一行


sed -e ‘$d’ file

删除最后两行


sed ‘N;$!P;D’ file

sed ‘N;$!P;$!D;$d’ file

删除最后n行


$vi sed.sh

$!/bin/bash

A=$(sed -n ‘$=’ file)

sed $(($A-n+1)),${A}d file


$ sed ‘/user/d’/etc/passwd

删除带有string的行(del include love row head)


sed -i ‘/^love/d’ file

sed -i ‘/love/d’ file

vi删除包含strings前4行,后34行


:/strings/-4,+34d

删除配置文件中#号注释行


sed ‘s#\#.*##’ file.conf > file.new.conf

sed ‘s,\#.*,,’

删除配置文件中//号注释行


sed ‘s#//.*##’ file.conf > file.new.conf

sed ‘s@//.*@@’

删除由空格和Tab而成的空行


sed ‘/^[[:space:]]*$/d’ file.conf > file.new.conf

sed ‘/^[[:space:]]*$/d’

删除尾行的空格


sed -e ‘s/.$//’ file > file.new.conf

在尾行添加1个空格


sed ‘s/[0-9]$/& /g’ file > flile.new.conf


参数s:替换文本,替换命令用替换模式替换指定模式

格式为:[ a d d r e s s [,address]] s/pattern-to-find/replacement-pattern/[g p w n]


$ sed ‘s/user/USER/’/etc/passwd 将第1个user替换成USER,g表明全局替换

$ sed ‘s/user/USER/g’/etc/passwd 将所有user替换成USER

$ sed ‘s/user/#user/’/etc/passwd 将第1个user替换成#user,如用于屏蔽作用

$ sed ‘s/user//’/etc/passwd 将第1个user替换成空

$ sed ‘s/user/&11111111111111/’/etc/passwd 如果要附加或修改一个很长的字符串,可以使用( &)命令,&命令保存发现模式以便重新调用它,然后把它放在替换字符串里面,这里是把&放前面

$ sed ‘s/user/11111111111111&/’/etc/passwd 这里是将&放后面

在包含字符串test的任意行上,将111替换成222 $ sed ‘/test/s/111/222/g’ sample.txt


快速一行正则表达式命令

下面是一些一行命令集。([ ]表示空格,[TAB]表示t a b键)


‘s/\ . $//g’ 删除以句点结尾行

‘-e/abcd/d’ 删除包含a b c d的行

‘s/[ ] [ ] [ ] */[ ]/g’ 删除一个以上空格,用一个空格代替

‘s/^ [ ] [ ] *//g’ 删除行首空格

‘s/\ . [ ] [ ] */[ ]/g’ 删除句点后跟两个或更多空格,代之以一个空格

‘/^ $/d’ 删除空行

‘s/^ .//g’ 删除第一个字符

‘s/COL \ ( . . . \ )//g’ 删除紧跟C O L的后三个字母

‘s/^ \///g’ 从路径中删除第一个\

‘s/[ ]/[TAB]//g’ 删除所有空格并用t a b键替代

‘S/^ [TAB]//g’ 删除行首所有t a b键

‘s/[TAB] *//g’ 删除所有t a b键


用sed删除文件中的换行符,杀鸡哪需牛刀?

tr -d ‘\n’ file

真的需要sed

sed -nr ‘ H;

$ {

x;

s/\n//g;

p

}’


sed获取ip

[root@c01 ~]# ifconfig eth0|sed -ne ‘s/^.*addr:\([0-9.]*\).*$/\1/p’

192.168.100.180


[root@c01 ~]# ifconfig eth0 | sed -e ‘/inet/!d’ -e ‘s/.*addr://’ -e ‘s/[ ].*//’

192.168.100.180


\/转义字符

echo /usr/local/bin | sed ‘s/\/usr\/local\/bin/\/common\/bin/’

find . -name “*.html” |xargs sed -i ‘s#/canApp/evaluation/html/   index.html#http://www.wallcopper.com/eva/#g’

都可以把当前目录下的.c .h文件中的TAB替换成4个空格。

find . -name “*.[c|h]” | xargs sed -i ‘s/\t/ /g’


参数f:

以下三个命令相等,先在包含字符串test的任意行上,将111替换成222,再将字符f替换成hello


$ sed ‘/test/s/111/222/g ; s/f/hello/g’ sample.txt

$ sed -e ‘/test/s/111/222/g’ -e ‘s/f/hello/g’ sample.txt

选项-f: 将要执行的所以编译命令放入在文件中


$ more scher

/test/s/111/222/g

s/f/hello/g’ sample.txt

$ sed -f scher sample.txt


参数q:表示跳离sed。最多与一个地址参数配合。

打印出含有a或b字符的行,一旦遇到数字,即刻停止打印。


$ sed -n -e ‘/[0-9]/q’ -e ‘/[a b]/p’

到china quit

sed ‘china/q’ myfile.txt


参数-i后缀:替换并将源文件备份改后缀

$ sed -i.bak ‘s/123/efg/g’ a.txt 备份源文件


参数r:在某行插入文件

$ sed -i ’2 r readfile.txt’ writefile.txt

参数w:读入文件中的内容存入到另一文件中(temp.txt)。最多与一个地址参数配合。

将sample.txt文件中含test字符串的数据行,copy至temp.txt档中储存(原temp.txt中无内容)

$ sed -e ‘/test/w temp.txt’ sample.txt


参数y:转换数据中的字符。最多与两个地址参数配合。

1.将文件中的小写字母替换成大写字母。

$ sed -e ‘y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/’ sample.txt

其中前后字符个数必须相同.


参数!:表示不执行函数参数。

将文件中除了important字符串,其余全删除。

$ sed -e ‘/important/!d’ sample.txt


参数=:表示印出资料的行数。最多与两个地址参数配合。

1.印出文件资料并显示行数。

$ sed -e ‘=’ sample.txt

计算总行数

$ sed -n ‘$=’ a.txt


其它参数

参数#:表示对文字的注释。


参数N:表示添加下一笔资料到pattern space内。最多与两个地址参数配合。(添加下一笔:添加一笔资料后,继续添加这个资料的下一行数据到pattern space内) 1,将文件中的数据合并。文件内容如下: UNIX LINUX

$ sed -e ‘N’ -e’s/\n/\,/g’ sample.txt

结果如下: UNIX,LINUX


参数D:表示删除pattern space内的第一行资料。最多与两个地址参数配合。


参数P:打印出pattern space内的第一行资料。


$ sed -n -e ‘N’ -e ‘P’ sample.txt

利用N将下一行资料(即:偶数行)添加到pattern space内,在利用P打印出奇数行。 解释过程:由于N的作用,使得每次添加一条资料到pattern space后,先不执行操作,而是继续添加这个资料的下一行到pattern space内, 然后P参数打印出第一行资料。


参数h:表示暂存pattern space的内容至hold space(覆盖)。最多与两个地址参数配合。


参数H:表示暂存pattern space的内容至hold space(添加)。最多与两个地址参数配合。


参数g:表示将hold space的内容放回至pattern space内。(覆盖掉原pattern space内的数据)


参数G:表示将hold space的内容放回至pattern space内。(添加大到原pattern space数据之后)


将文件中所有空行删除,并在每一行后面增加一个空行。


$ sed ‘/^$/d;G’ sample.txt

将文件中所有空行删除,并在每一行后面增加两个空行。


$ sed ‘/^$/d;G;G’ sample.txt

参数x:表示交换hold space与pattern space内的数据。


将文件第三行的数据替换成第一行的数据。


$ sed -e ’1h’ -e ’3x’ sample.txt


本文出自 “Jet'aime” 博客,谢绝转载!

sed 的用法

标签:sed 命令详解

原文地址:http://linuxyu.blog.51cto.com/10927663/1727739

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!