sed函数参数及示例

一些心得:

1、sed是流编辑器,处理一行一行的数据,可以将每次读入一行看作*forward_iterator++

2、forward_iterator == end()读入直接退出sed

3、ps为空时,立即开始下个循环

4、所有与模式相关的操作都是以ps为对象

一些命令在官方指南上的翻译:

d

1.清空ps;2.立即开始下个循环

n

1.如果没有-n参数,打印ps;2.如果不是最后一行,用下一行覆盖ps,否则退出sed

D

如果ps为空,开始下个循环,否则删除ps中第一行(包括\n么),跳过读入新行,开始下个循环。

N

如果不是最后一行,添加\n以及下一行到ps,否则退出sed

 

函数s表示替换(substitute)文件内字符串。格式:

[address[,address2]]s/pattern/replacement/[flag]

地址可以是数字,可以是pattern,还可以是$(最后一行)单个范围表示满足条件的行,多个范围表示一个闭区间,没有范围表示所有行,地址与后面的函数之间可以有任意多的空白,但是不能是换行

sed -e 's/test/& it' filename

&表示一次正则匹配的全部,仅仅在replacement部分是特殊字符(需要用\转义)

sed -er 's/(have) (a) (test)/[\3 \2 \1]/'    #have a test被替换成为了[my car test]

\n 表示前向引用,从1开始,一共9个?

\ 反斜杠,用来转义特殊符号

flag用来控制一些替换情况:

g:替换该行中所有符合的字符串

m(十进制数):替换行内第m个符合的字符串

p:如果有替换发生,完成所有替换后,将数据输出到stdout

sed -ne 's/&&/7/3pg' test        #表示从第三次(3)发现&&开始将此后(g)的&&替换成为g,并打印(p),flag没有顺序的要求

w file:将该行出现在stdout数据输出到file覆盖

为空:将资料行内第一个符合pattern的字符串以replacement字符串替换

delimiter:默认为/,但除空白,换行符外,任何字符可用作delimiter

 

函数d表示删除数据行。格式:

[address[,address]]d

将pattern space内符合地址参数的数据删除

将下一笔资料读进pattern space

重新执行sed script

 

函数a表示将资料添加到文件中(当前行的下一行)。格式:

[address] a\ string    但是在gnu的sed中:[address[, address]] a\ string

string可以与a\同一行,也可以不同行,但是\一定是有的,而且加的内容都是在匹配行的后面一行,注意换行符要用\转义,无论是-e还是-f,eg:(script中的data)

/&&/a\12345\

12234

 

函数i表示将资料插入文件中(当前行的上一行)。格式:

[address[, address]] i\ string

注意事项与a\相同

 

函数c表示改变文件中的数据。格式:

[address[,address]]c\ string    #用string替换指定行的内容

 

函数p表示打印出资料。格式:

[address[,address]] p

 

函数l,除可以将资料中的不可打印字符以ascii码列出之外,其余均和p相同

 

函数r表示读入其他档案内容到文件中。格式:

[address[, address]] r filename

r后空格可以无限多,文件内容在匹配行的下一行打出,文件不存在就不操作(连空行都不打)

 

函数w表示将范围内的行覆写到其他文档中。格式:

[address[, address]] w filename

 

函数y完成translate的作用。格式:

[address[, address]] y /xyz…/abc…/    #一一对应的做变换

 

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

[address[, address]] !函数参数

表示地址范围外的数据执行函数参数

[address[, address]]! 函数参数

[address[, address]] ! 函数参数

同第一个,但

[address[, address]] {! 函数参数}

表示地址范围内的数据不执行函数参数

 

函数n表示读入下一行资料。格式:

动作为:

(没有-n情况下,输出)

pattern space被覆盖为下一笔资料

执行下一个函数。eg:

sed -ne 'n;p' data    #打印偶数行

 

函数q表示跳离sed。格式

[address]q    #匹配address这行也会打印(如果是没有-n),eg:

sed -e '/Linux/q' -f script file        #读到Linux时就离开sed,注意-e和-f配合使用

 

函数#表示后面的文字都是注解,直到换行符为止,多行用\间隔

 

函数N表示添加下一笔资料在pattern space中。格式:

[address[, address]] N

数据行间以换行符分隔,可以用\n来match,eg:

N;s/\n/ /;p    #每两行合并成一行

 

函数D表示删除pattern space内的第一行资料。格式:

[address[, address]] D

如果ps为空,下个循环;删后如果ps不为空,下个循环不读入记录

 

函数P表示打印pattern space中的第一行。格式:

[address[, address]] P

sed -n -e 'N' -e 'P' file    #打印奇数行

 

函数h表示将pattern space资料复制给hold space。格式:

[address[, address]] h

 

函数H表示将pattern space资料附加给hold space。格式:

[address[, address]] H

 

函数g:h反动作

函数G:H反动作

函数x,交换空间数据

 

函数b label表示跳转,跳转到:label处,label为空,跳转到末尾

编辑指令 m1

:记号

编辑指令 m2

.

.

.

[address1,[address2]]b [记号]

编辑指令 m3

 

函数t label表示跳转,跳转到:label处,label为空,跳转到末尾,注意和b的区别(前一个s执行才执行跳转

编辑指令 m1

:记号

编辑指令 m2

.

.

.

s/.../.../

[address1,[address2]]t [记号]

编辑指令 m3

转载于:https://www.cnblogs.com/observer/archive/2011/11/16/2250552.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值