zoukankan      html  css  js  c++  java
  • linux-sed命令

    第1章 sed基础

    1.1 sed的选项  stream editor 流编辑器

     -r              支持扩展正则

     -n              取消默认输出

     -i               直接修改不输出到桌面

     -i.bak        备份

    1.2 sed的书写格式

    sed    '条件命令'

    sed      'pattern命令'

    sed      '模式命令'

    1.3 sed命令执行过程

    1.读取文件内容第1行

    2.是否满足条件

         1).满足条件 执行对应的命令 p  s  d 

         2).不满足   继续第1步

    3.截止到文件的最后一行

    第2章 sed命令的使用

    sed增删改查   不加i选项只会把修改内容输出到并没有真正修改,加上i选项会直接修改文件内容

    2.1 sed 增加  cai

    c   replace 替换

    a   append 追加

    i   insert 插入

    2.1.1 在person.txt文件第三行下追加12306,xiao,UFO

    查看person.txt文件

    [root@zeq lx]# cat person.txt
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO

    第三行下追加12306,xiao,UFO

    [root@zeq lx]# sed '3a12306,xiao,UFO' person.txt      a追加,3a在第三行下追加
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO
    12306,xiao,UFO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO

    2.1.2 在person.txt文件第三行上插入12306,xiao,UFO

    [root@zeq lx]# sed '3i12306,xiao,UFO' person.txt
    
    101,zeq,CEO
    102,zhang,CTO
    12306,xiao,UFO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO

    2.1.3 把person.txt文件第三行替换成12306,xiao,UFO

    [root@zeq lx]# sed '3c12306,xiao,UFO' person.txt
    
    101,zeq,CEO
    102,zhang,CTO
    12306,xiao,UFO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO

    2.1.4 在文件最后一行增加

    12306,xiao,UFO

    12580,tao,XO

    [root@zeq lx]# sed  '$a12306,xiao,UFO
    12580,tao,XO' person.txt    $最后一行   
    回车
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO
    12306,xiao,UFO
    12580,tao,XO

    2.2 sed 删除 d   

    2.2.1 删除第2行到第5行

    [root@zeq lx]# sed '2,5d' person.txt
    
    101,zeq,CEO
    110,ahao,COCO

    2.2.2 删除从yy开始的行到文件结尾的内容

    [root@zeq lx]# sed   '/yy/,$d' person.txt             $文件结尾
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO

    2.2.3 删除包含ahao的行

    [root@zeq lx]# sed '/ahao/d' person.txt
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO

    2.2.4 删除不包含ahao的行

    [root@zeq lx]# sed '/ahao/!d' person.txt             !取反,排除
    
    110,ahao,COCO

    2.3 sed 替换 's###g'

    2.3.1 替换掉所有的数字

    [root@zeq lx]# sed 's#[0-9]##g'  person.txt
    
    ,zeq,CEO
    ,zhang,CTO
    ,Love,COO
    ,yy,CFO
    ,faker,CIO
    ,ahao,COCO

    2.3.2 替换掉每行中的第一个数字

    [root@zeq lx]# sed 's#[0-9]##'  person.txt       sed 's#[0-9]##' 不加g,默认是匹配到每行第一个数字       sed 's#[0-9]##2' 匹配每行第二个数字
    
    01,zeq,CEO
    02,zhang,CTO
    03,Love,COO
    04,yy,CFO
    05,faker,CIO
    10,ahao,COCO

    2.3.3 后向引用  取出ip地址

    [root@zeq ~]# ifconfig eth0 |sed -rn '2s#^.*r:(.*)  Bc.*#1#gp'
    
    10.0.0.200
    [root@zeq ~]# ifconfig eth0 |awk -F'[ :]+'   'NR==2{print $4}'
    
    10.0.0.200
    [root@zeq ~]# ifconfig eth0 |awk -F'addr:|  Bc'   'NR==2{print $2}'
    
    10.0.0.200
    [root@zeq ~]# ifconfig eth0 |awk -F'[^0-9.]+'   'NR==2{print $2}'
    
    10.0.0.200

    2.4 sed  查

    2.4.1 显示文件的第5行

    [root@zeq ~]# sed -n 5p person.txt
    
    105,faker,CIO

    2.4.2 显示文件的第2行到第5行

    [root@zeq ~]# sed -n '2,5p' person.txt
    
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO

    2.4.3 显示文件最后一行

    [root@zeq ~]# sed -n '$p' person.txt
    
    110,ahao,COCO

    2.4.4 显示文件中包含zeq的行

    [root@zeq ~]# sed -n '/zeq/p' person.txt
    
    101,zeq,CEO

    2.4.5 显示文件中从包含101的行到105的行

    [root@zeq ~]# sed -n '/101/,/105/p' person.txt
    
    101,zeq,CEO
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO

    2.4.6 特殊写法:显示文件的第1和4行和5行

    [root@zeq ~]# sed -n '1p ;4p; 5p' person.txt
    
    101,zeq,CEO
    104,yy,CFO
    105,faker,CIO

    2.4.7 显示有规律的行

    [root@zeq ~]# seq 10 |sed -n '1~2p'
    
    1
    3
    5
    7
    9

    2.5 sed命令中使用变量

    root@zeq ~]# x=zeq               设置x变量为zeq
    
    [root@zeq ~]# y=zeq1             设置y变量为zeq1
    
    [root@zeq ~]# sed 's#$x#$y#g'  person.txt
    
    101,zeq1,CEO
    102,zhang,CTO
    103,Love,COO
    104,yy,CFO
    105,faker,CIO
    110,ahao,COCO
    12306,xiao.UFO

    2.5.1 把文件person.txt文件中的每一行的内容 替换为对应的行号

    for n in {1..7}                     这里使用的shell脚本中的for循环
    
    do
    
         sed -i.bak "${n}s#.*#$n#g" person.txt
    
    done

    2.5.2 批量重命名:删除文件名中的html_

    touch zeq_html_{01..10}.jpg

    方法1  命令行格式
    
    [root@zeq data]# ls *.jpg|sed -r "s#(.*)(_.*)#mv & zeq2#g"|bash
    方法2  for循环
    
    for i in {01..10}
    
    do
    
    mv zeq_${i}.jpg  zeq_html_${i}.jpg 
    
    done
    方法3  rename
    
    rename  html_  ""    *.jpg        rename   修改谁    改为什么    修改什么文件
  • 相关阅读:
    2019.4.18 淘宝商品显示块2号铺设练习
    Debuggee not connected 寒江孤钓<<windows 内核安全编程>> 学习笔记
    指定的服务已标记为删除 寒江孤钓<<windows 内核安全编程>> 学习笔记
    删除自定义服务 寒江孤钓<<windows 内核安全编程>> 学习笔记
    发生系统错误 1275.此驱动程序被阻止加载 寒江孤钓<<windows 内核安全编程>> 学习笔记
    无法编译出.sys文件 寒江孤钓<<windows 内核安全编程>> 学习笔记
    iOS11 适配
    curl
    ddd
    201060512 viewcontroller view
  • 原文地址:https://www.cnblogs.com/zeq912/p/9537466.html
Copyright © 2011-2022 走看看