sed实例分析(三)--s命令中的&与\1-\9

一、&与\1-\9用法说明:

s命令语法:s/regexp/replacement/

&字符用于完全替换regexp匹配,如 s/man/wo&/,将man替换成woman

\1字符用于替换regexp中无字符()中的内容,\1替换第一个();\2替换第二个();如/s/I \(love\) \(you\)/\2\1me/,将I love you替换成you love me

二、实例1--删除连续重复的行:

cat file

1111111

222222

222222

333333

444444

444444

444444

sed'$!N;/^\(.*\)\n\1$/!P;D file

1111111

222222

333333

444444

使用行交叉模式,当模式空间的两行重复将不打印模式空间

$!N 读取的行不是最后一行,附加新行到模式空间

/^\(.*\)\n\1$/!P 如果模式空间的行匹配 line\nline即重复的行,则不打印

下面使用简化的sed流程分析

PATT:1111111

$!N-->PATT:1111111\n222222

/^\(.*\)\n\1$/!P -->OUT:1111111

D-->PATT:222222

$!N-->PATT:222222\n222222

/^\(.*\)\n\1$/!P -->OUT:

D-->PATT:222222

$!N-->PATT:222222\n333333

/^\(.*\)\n\1$/!P -->OUT:222222

D-->PATT:333333

$!N-->PATT:333333\n444444

/^\(.*\)\n\1$/!P -->OUT:333333

D-->PATT:444444

$!N-->PATT:444444\n444444

/^\(.*\)\n\1$/!P -->OUT:

D-->PATT:444444

$!N-->PATT:444444\n444444

/^\(.*\)\n\1$/!P -->OUT:

D-->PATT:444444

$!N-->PATT:444444\n444444

/^\(.*\)\n\1$/!P -->OUT:

D-->PATT:444444

OUT:444444

三、实例二-字符串翻转:

cat file

test

sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'file

tset

/\n/!G 模式空间不包含\n字符就添加保持空间的空行到模式空间

s/\(.\)\(.*\n\)/&\2\1/ 替换

//D 匹配最近的一个正则表达式,执行D命令

PATT:test
COMM:/\n/!G
PATT:test\n
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:test\nest\nt
COMM://D
PATT:est\nt
COMM:/\n/!G
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:est\nst\net
COMM://D
PATT:st\net
COMM:/\n/!G
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:st\nt\nset
COMM://D
PATT:t\nset
COMM:/\n/!G
COMM:s/\(.\)\(.*\n\)/&\2\1/
PATT:t\n\ntset
COMM://D
COMM:\ntset
COMM:/\n/!G
COMM:s/\(.\)\(.*\n\)/&\2\1/
COMM://D
COMM:s/.//
PATT:tset



 

 

 

猜你喜欢

转载自tiro-li.iteye.com/blog/1901679