• sed命令使用


     一. 替换

      1.神奇变换(y命令的使用)

      代码:

      sed 'y/ori_letter_list/target_letter_list/' filename

      代码:

      cat filename

      1234567890

      2345678901

      3456789012

      4567890123

      测试

      将文件中1换成A

      将文件中2换成B

      ...

      将文件中0换成J

      代码:

      sed 'y/1234567890/ABCDEFGHIJ/' filename

      ABCDEFGHIJ

      BCDEFGHIJA

      CDEFGHIJAB

      DEFGHIJABC

      注意变换关系是按两个list的位置对应变换,y是一个管局命令,拒绝使用后缀flag/g

      list1:1234567890

      list2:ABCDEFGHIJ

      下面再作一个与前例相反的变换

      代码:

      sed 'y/0987654321/ABCDEFGHIJ/' filename

      JIHGFEDCBA

      IHGFEDCBAJ

      HGFEDCBAJI

      GFEDCBAJIH

      2.替换每行第一个匹配

      代码:

      sed 's/regexpr/anyword/' filename

      sed 's/regexpr/anyword/1' filename

      举例:

      引用:

      cat filename

      1234567890 2345678901

      3456789012 4567890123

      sed 's/5/五/' filename

      1234五67890 2345678901

      34五6789012 4567890123

      3.替换每行第n(如果有的话)个匹配

      代码:

      sed "s/regexpr/anyword/${n}" filename

      cat filename

      111111111111111111

      222222222222222222

      333333333333333333

      444444444444444444

      举例

      sed "s/4/ 四 /8" filename

      111111111111111111

      222222222222222222

      333333333333333333

      4444444 四 4444444444

      4.替换每行所有匹配

      代码:

      cat filename

      1234567890 2345678901

      3456789012 4567890123

      代码:

      举例:

      sed 's/3/三/g' filename

      12三4567890 2三45678901

      三456789012 456789012三

      二.行号处理

      1.为文件加行号

      代码:

      sed = filename|sed 'N;s/\\n/:/'

      cat filename

      111111111111111111

      222222222222222222

      333333333333333333

      444444444444444444

      举例

      代码:

      sed = filename|sed 'N;s/\\n/:/' filename

      1:111111111111111111

      2:222222222222222222

      3:333333333333333333

      4:444444444444444444

      2.仅为文件中的正文行加行号

      代码:

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

      举例

      代码:

      cat filename

      111111111111111111

      222222222222222222

      333333333333333333

      444444444444444444

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

      1:111111111111111111

      3:222222222222222222

      4:333333333333333333

      6:444444444444444444

      三.字串翻转

      代码:

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

      举例

      代码:

      echo 1234567890|sed '/\\n/!G;s/\\(.\\)\\(.*\\n\\)/&\\2\\1/;s/.//'

      0987654321

      四.选择性输出

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

      代码:

      sed 'n;d'

      sed 'x;$!N;x'

      sed -n 'p;n'

      1

      3

      5

      7

      2.打印偶数行(隔行输出)

      代码:

      sed -n 'n;p'

      sed '1d;n;d;'

      2

      4

      6

      8

      3.删除连续重复行(大量使用了pattern space 文件太大时要注意)

      代码:

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

      #使用 $!N 要当心内存溢出

      举例

      代码:

      cat file

      111111111111111111

      222222222222222222

      222222222222222222

      333333333333333333

      444444444444444444

      444444444444444444

      444444444444444444

      444444444444444444

      444444444444444444

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

      111111111111111111

      222222222222222222

      333333333333333333

      444444444444444444

      4.合并上下行并以空格相分隔

      代码:

      sed '$!N;s/\\n/ /'

      举例

      代码:

      cat file

      1234567890

      0987654321

      执行命令后

      1234567890 0987654321

      5.将以\\符号结尾的行与下行合并并以空格分隔(拼接断行)

      代码:

      sed -e :a -e '/\\\\$/N; s/\\\\\\n/ /; ta'

      举例

      代码:

      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.按关键字拼接行

      如果某行以=开始,则合并到上一行并替代=为空格

      代码:

      sed -e :a -e '$!N;s/\\n=/ /;ta' -e 'P;D'

      举例

      代码:

      cat file

      111111111111111111

      222222222222222222

      =333333333333333333

      444444444444444444

      sed -e :a -e '$!N;s/\\n=/ /;ta' -e 'P;D' filename

      111111111111111111

      222222222222222222 333333333333333333

      444444444444444444

      7.输出匹配行的下一行

      代码:

      sed -n '/regexpr/{n;p;}' filename

      举例

      代码:

      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

      举例

      代码:

      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的行

      代码:

      sed '/^begin/,/^end/{/myword/d;}' filename

      引用:

      cat filename

      myword

      begin

      myword

      Number!

      myword

      Number!

      myword

      Number!

      myword

      Number!

      end

      myword

      Number!

      测试

      引用:

      myword

      begin

      Number!

      Number!

      Number!

      Number!

      end

      myword

      Number!

      五.字串解析

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

      代码:

      echo "WeLoveChinaUnix"|sed -e 'H;s/\\(..\\).*/\\1/;x;s/.*\\(.\\{9\\}\\)$/\\1/;x;G;s/\\n/ /'

      We ChinaUnix

      2.分解日期串

      代码:

      echo 20030922|sed 's/\\(....\\)\\(..\\)\\(..\\)/\\1 \\2 \\3/'|read year month day

      echo $year $month $day
  • 相关阅读:
    论url
    jquery send(data) 对data的处理
    jquery ajax 对异步队列defer与XMLHttprequest.onload的依赖
    requirejs解决异步模块加载方案
    vue 解决display与 transition冲突
    node exports与 module.exports的区别
    node js 模块分类
    写在入职初期
    入职前要学习的一些知识
    论文实验 云平台压力测试及服务器性能测试
  • 原文地址:https://www.cnblogs.com/kakaliush/p/1691419.html
Copyright © 2020-2023  润新知