一、&与\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