转自 http://blog.uouo123.com/post/704.html
Linux之sed匹配第N个进行替换
-
sed '0,/88/s//--/' file
-
sed ':a;N;$!ba;s/88/--/' file
-
#替换第三个
-
sed '/88/{x;s/^/./;/^.{3}$/{x;s/.*/--/;x};x;}' file
-
sed ':a;N;$!ba;s/88/--/3' file 粗体字都是固定格式sed ':a;N;$!ba;s/88这里是要找的内容/--这里是要替换的内容/3' file
-
sed ':a;/ 88/!{$s/88/--/;N;ba};P;D' file
-
sed ':a;N;$!ba;s/(.*)88/1--/' file
cc1 abcc abc abbc aabc abbccdd abbcif abbcccccdefa abcccclow abccccdlll
22 /you 192.168.1.0/24 (wo you huidao ) fa yyy=fang
33
44
55 99988888((((())))))*/^%$sii
66 99988888((((())))))*/^%$sd
77 99988888aa
22 99988888((((())))))
33 99988888((((()))))){
33 99988888((((())))))+-!
44 99988888((((())))))+-!?.,
come true((()
[root@mysql-slave ~]# sed -i ':a;N;$!ba;s#/#99988888((((())))))*&^%$#3' re
[root@mysql-slave ~]# sed ':a;N;$!ba;s#99988888((((())))))*/^%$sii#ii#' re
[root@mysql-slave ~]# sed ':a;N;$!ba;s#99988888((((())))))*/^\%$sii#ii#' re
[root@mysql-slave ~]# sed ':a;N;$!ba;s#99988888((((())))))+-!#hello#' re
[root@mysql-slave ~]# sed ':a;N;$!ba;s#99988888((((()))))){#1111111111111#' re
[root@mysql-slave ~]# sed ':a;N;$!ba;s#99988888((((())))))+-!?.,#ooooooooo#' re
[root@mysql-slave ~]# sed '2,5s/^/cc1/g' re
# 注意这里的 " & " 符号,如果没有 “&”,就会直接将匹配到的字符串替换掉
sed 's/^/添加的头部&/g' #在所有行首添加 sed 's/$/&添加的尾部/g' #在所有行末添加 sed '2s/原字符串/替换字符串/g' #替换第2行 sed '$s/原字符串/替换字符串/g' #替换最后一行 sed '2,5s/原字符串/替换字符串/g' #替换2到5行 sed '2,$s/原字符串/替换字符串/g' #替换2到最后一行
[root@mysql-slave ~]# sed '5 q' passwd
- sed'5 q'/etc/passwd#打印前5行
- sed-n '/r*t/p'/etc/passwd#打印匹配r有0个或者多个,后接一个t字符的行
- sed-n '/.r.*/p'/etc/passwd#打印匹配有r的行并且r后面跟任意字符
- sed-n '/o*/p'/etc/passwd#打印o字符重复任意次
- sed-n '/o{1,}/p'/etc/passwd#打印o字重复出现一次以上
- sed-n '/o{1,3}/p'/etc/passwd#打印o字重复出现一次到三次之间以上