设为首页 收藏本站
查看: 599|回复: 0

[经验分享] linux sed 个人常用的

[复制链接]

尚未签到

发表于 2018-5-22 10:26:16 | 显示全部楼层 |阅读模式
  一、sed
  1. 替换每行第n(如果有的话)个匹配
  
  sed "s/regexpr/anyword/${n}" filename
  cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
举例
sed "s/4/ 四 /8" filename
111111111111111111
222222222222222222
333333333333333333
4444444 四 4444444444
  2.替换每行第一个匹配


  [ - ]
  CODE:
  sed 's/regexpr/anyword/' filename
    sed 's/regexpr/anyword/1' filename
  
举例:


  QUOTE:
  cat filename
1234567890 2345678901
3456789012 4567890123
sed 's/5/五/' filename
1234五67890 2345678901
34五6789012 4567890123
  3.行号处理
  1> 为文件加行号
  CODE:
  sed = filename|sed 'N;s/\n/:/'
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
  
举例


  [ - ]
  CODE:
  sed = filename|sed 'N;s/\n/:/' filename
1:111111111111111111
2:222222222222222222
3:333333333333333333
4:444444444444444444
  2>仅为文件中的正文行加行号
  [ - ]
  CODE:
  cat filename
111111111111111111

222222222222222222
333333333333333333

444444444444444444

sed /./= a|sed '/./N;s/\n/:/' filename
1:111111111111111111

3:222222222222222222
4:333333333333333333

6:444444444444444444
              3>.字串翻转


  [ - ]
  CODE:
  echo 1234567890|sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
0987654321
  #########################################################
  #########################################################
  四.选择性输出

  

  1.打印文档奇数行(隔行输出)


  [ - ]
  CODE:
  sed 'n;d'
sed 'x;$!N;x'
sed -n 'p;n'

1
3
5
7
  
2.打印偶数行(隔行输出)


  [ - ]
  CODE:
  sed -n 'n;p'
sed '1d;n;d;'
2
4
6
8
  
3.删除连续重复行(大量使用了pattern space 文件太大时要注意)


  [ - ]
  CODE:
  sed '$!N; /^\(.*\)\n\1$/!P; D'     
#使用 $!N 要当心内存溢出
  
举例


  [ - ]
  CODE:
  cat file
111111111111111111
222222222222222222
222222222222222222
333333333333333333
444444444444444444
444444444444444444
444444444444444444
444444444444444444
444444444444444444

sed '$!N; /^\(.*\)\n\1$/!P; D' filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
  4.合并上下行并以空格相分隔


  [ - ]
  CODE:
  cat file
1234567890
0987654321
执行命令后
1234567890 0987654321
  
5.将以\符号结尾的行与下行合并并以空格分隔(拼接断行)


  [ - ]
  CODE:
  cat filename
1 111111111111111111\
2 222222222222222222
3 333333333333333333\
4 444444444444444444

sed -e :a -e '/\\$/N; s/\\\n/ /; ta' filename
1 111111111111111111 2 222222222222222222
3 333333333333333333 4 444444444444444444
  6.按关键字拼接行
  如果某行以=开始,则合并到上一行并替代=为空格


  [ - ]
  CODE:
  cat file
111111111111111111
222222222222222222
=333333333333333333
444444444444444444

sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' filename
111111111111111111
222222222222222222 333333333333333333
444444444444444444
  
7.输出匹配行的下一行


  [ - ]
  CODE:
  cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n '/^3/{n;p;}' filename
4 444444444444444444
  8.显示匹配行的行号并输出匹配行的上行、匹配行、下行

sed -n -e '/regexpr/{=;x;1!p;g;$!N;p;D;}' -e h
举例


  [ - ]
  CODE:
  cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444

sed -n -e '/^3/{=;x;1!p;g;$!N;p;D;}' -e h  filename
3                                       #匹配行的行号
2 222222222222222222  #上一行
3 333333333333333333  #匹配行
4 444444444444444444  #下一行
  9.删除文档中某标志区域内的关键字匹配行

     删除文档中从being开到end结束的块中包含myword的行


  [ - ]
  CODE:
  sed '/^begin/,/^end/{/myword/d;}' filename
  



  QUOTE:
  cat filename
myword
begin
myword
Number!
myword
Number!
myword
Number!
myword
Number!

end
myword
Number!
  
测试


  QUOTE:
  myword
begin
Number!
Number!
Number!
Number!
end
myword
Number!
  五.字串解析

1.从字串中解析出两个子串(前2各字符和后9个字符)


  [ - ]
  CODE:
  echo "WeLoveChinaUnix"|sed -e 'H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n/ /'
We ChinaUnix
  
2.分解日期串


  [ - ]
  CODE:
  echo 20030922|sed 's/\(....\)\(..\)\(..\)/\1 \2 \3/'|read year month day
echo $year $month $day
2003 09 22
  ######################################################################################
  ########################################################################################
  cat file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
2 192.148.99.253 [17/Jun/2003:11:18:21 /si
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
3 192.93.108.187 [17/Jun/2003:14:39:11 /si
5 192.68.82.78   [05/Jun/2003:00:05:45 /hou/
9 192.68.82.78   [05/Jun/2003:00:05:45 /ss
4 192.228.210.10 [16/Jun/2003:09:29:30 /hou/
  
d=6
取文件的第六行,则
单引号


  [ - ]
  CODE:
  sed -n ''"$d"'/p'  file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  
双引号


  [ - ]
  CODE:
  sed -n "$d"p file  or  sed -n "${d}p" file
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  
结果完全相同。
又:
取文件的第1到第6行,则:
单引号:


  [ - ]
  CODE:
  sed -n '1,'"$d"'p' file
1 192.148.99.253 [17/Jun/2003:11:25:44 /sc
2 192.148.99.253 [17/Jun/2003:11:18:21 /si
1 192.148.99.253 [17/Jun/2003:11:20:34 /sp
2 192.148.99.253 [17/Jun/2003:11:18:13 /ap
1 192.148.99.253 [17/Jun/2003:11:17:30 /hou/
1 192.93.108.187 [17/Jun/2003:14:49:14 /sc
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-479007-1-1.html 上篇帖子: linux rsync 远程同步 下篇帖子: Linux devive mapper multipath
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表