Sed命令的用法

Sed命令的用法

sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合、交换文件中的资料行,或读入其它档的资料到文>件中,也可替换(substuite)它们其中的字串、或转换(tranfer)其中的字母等等。当sed由标准输入读入一行资料并放入pattern space时,sed依照sed script 的编辑指令逐一对pattern space内的资料执行编辑,之後,再由pattern space内的结果送到标准输出,接着再将下一行资料读入.如此重执行上述动作,直至读>完所有资料行为止。

 sed总是以行对输入进行处理
 sed处理的不是原文件而是原文件的拷贝
指令格式 :
sed options script file;
script:
用法一:[address1[,address2]]command  #指定行执行一个命令时
用法二:[address1[,address2]]{ #指定行执行多个命令时
                             command1
                             command2
                             command3
            }
 [address1[,address2]]表示命令做作用于文本的某行或某些行。
 例:
    sed '2s/dog/cat/' data1   #将data1中的第2行中的dot替换为cat
    sed '2,4s/dog/cat/' data1  #将data1中的第2~4行中的dot替换为cat
option:

-e script 在处理输入时将script中指定的命令添加到运行的命令中;

例:$ sed -e '
    > s/brown/green/
    > s/fox/elephant/
    > s/dog/cat/ ' filename

-f file 在处理输入时,将file中指定的命令添加到运行的命令中;
例:$ sed -f script1 filename #script1为脚本文件:“sed options script file”中的script
-n 不要为每个命令生成输出,等待print命令来输出,即禁止sed编辑器输出;
-r sed 的动作支援的是延伸型正则表达式的语法。(预设是基础正则表达式语法)
-i 重点内容直接修改读取的文件内容,而不是由屏幕输出

flags

数字:表明新文本将会替换掉第几处模式匹配的地方;
g:表明新文本将会替换掉所有已有文本出现过的地方,如果不添加,就会只会对每行第一次匹配的地方做处理,一般用于字符替换时使用;
p:表明原来行的内容要打印出来;
w file:将替换的结果写到文件中;

function

a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(当前行的下一行);
c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行;
d :删除, d 后面通常不接其他flags;
i: 插入,插入的文本将插入在指定位置的前面;

$ echo 'Test Line 2'|sed 'i\Test Line 1'
输出:Test Line 1
     Test Line 2 

p :列印,亦即将某个选择的数据印出。通常 p 会与参数sed -n 一起运行;
s :取代,取代,用新字串替换就字串,arguments可以为:1,20s/old/new/g

s/pattern/replacement/flags

option

{ }  集合有相同位址参数的指令。
!  不执行函数参数。
=  印出资料行数( line number )。
b label  将执行的指令跳至由 : 建立的参考位置。
D  删除 pattern space 内第一个 newline 字母 / 前的资料。
g  拷贝资料从 hold space。
G  添加资料从 hold space 至 pattern space 。
h  拷贝资料从 pattern space 至 hold space 。
H  添加资料从 pattern space 至 hold space 。
l  印出 l 资料中的 nonprinting character 用 ASCII 码。
n  读入下一笔资料。
N  添加下一笔资料到 pattern space。
P  印出 pattern space 内第一个 newline 字母 / 前的资料。
q  跳出 sed 编辑。
r  读入它档内容。
t label  先执行一替换的编辑指令 , 如果替换成牛p>则将编辑指令跳至 : label 处执行。
w  写资料到它档内。
x  交换 hold space 与 pattern space 内容。
y  转换(transform)字元。
实例:

1、删除

(1) sed -e '1d' inputfile #删除第一行
    sed -e 'xd' inputfile #删除第x行
    sed -e 'x1d' -e 'x2d' -e 'x3d' inputfile #删除第x1,x2,x3行
当然也许还有更好的办法。
(2) sed -e '1,3d' file #删除第一到第三行
     sed -e '1,$d' file     # 删除第一行到最后一行
(3) sed -e '/#/d' file  #删除含有'#'号的行
    sed -e '/B/!d' file #除含有字符串B的行全部删除
(4) sed -e '/word1/, /word2/d' file  #删除从含有单词word1到含有单词word2的行
(5) sed -e '/t.*t/d' file     (删除以t开头以t结尾的行)

2、 替换
Sed 可替换文件中的字串(用s命令)、资料行、甚至资料区(用c命令)。
[address1[ ,address2]] s/pattern/replacemen/[flag]
替换行-c命令

(1) sed -e '1c/#!/bin/more' file #把第一行替换成#!/bin/more
    sed -e 'nc/a b c' file #把第n行替换成a b c
(2) sed -e '1,10c/I can do it' file  #把1到10行替换成一行:I can do it
   sed -e '1,10c/hahaha/nxixixi' file #换成两行hahaha xixixi,换成多行时在每行中间添加行分隔符/n

(3) sed -e 's/string1/& string 2/g' file #在每行中所有出现string1的地方后面添加 string2
    [root@localhost shelltest]# cat aa
     aaaa
     aaa
    [root@localhost shelltest]# sed 's/aa/& bbcc/' aa #没有加flag:g 所以只匹配了每行的第一个 
    aa bbccaa
    aa bbcca

替换指定行的内容

sed -e '/machine/s/phi/beta/g' file #将文件中含"machine"字串的行中的"phi"字串,替换成为"beta"字串
sed -e '1,10 s/w1/& w2/g' file #把1到10内的w1字符串替换成w1 w2字符串。

3、插入内容-i命令(当前行的上一行)-a命令(当前航的下一行)
[address1] i/insercontent/[flag]
[address1] a/insercontent/[flag]

sed -e '1i/words' file      #在第一行前面插入一行words
sed -e '/aa/i/words' file   #在含有aa字串的行前面插入一行words

4 、文本的打印: p,常与-n搭配使用

(1) sed -e '/then/ p' filename  #打印所有行并重复打印含有then 的行
(2) sed -n '/then/ p' filename  #只打印含有then的行
(3) sed -e '1,3 p' filename     # 打印所有行并重复1-3行
(4) sed -n '1,3 p' filename     # 打印1-3行
(5) sed -n '/if/,/fi/ p' filename #打印字符if和fi之间的内容

5 、字元的替换: y,以单个字母为单位替换

sed -e 'y/abc../xyz../' filename #把文件中的a字母替换成x, b替换成y, c替换成z。

6 、改变文件中的资料: c
基本格式:
[address1[ ,address2]]c/ filename
函数参数 c 紧接着 “/” 字元用来表示此行结束 , 使用者所输入的资料必须从下一行输入。如果资料超过一行 , 则须在>每行的结尾加入”/”

sed -e '/zhengxh/c hhhh' filename
表示把含有字符串zhengxh的行,该成hhhh。

8、 读入下一行资料: n

[address1[ ,address2]] n
sed -n -e '/echo/n' -e 'p' temp # 表示输出文件,但如果一行含有字符串echo,则输出包含该字符串的下一行。
sed -n -e 'n' -e 'p' filename #输出文中的偶数行

9、命令的复用

一次执行多个命令的方式有三种:
(1) sed 's/w1/& w2/g; 1/i/words' filename   (使用;号把命令隔开,注意前面不加-e参数)
(2) sed -e 'cmd1' -e 'cmd2'  filename     (使用多个-e参数)

参考文档:
http://blog.csdn.net/zg_hover/article/details/1804481
http://www.cnblogs.com/ggjucheng/archive/2013/01/13/2856901.html
http://www.cnblogs.com/emanlee/archive/2013/09/07/3307642.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值