zoukankan      html  css  js  c++  java
  • Linux三剑客之sed

    Linux三剑客之grep
     
    Linux三剑客之awk
    1、描述
    Sed  is a stream editor.  A stream editor is used to perform basic text transformations on an input stream (a file or input from a pipeline).  While in some ways similar to an
    editor which permits scripted edits (such as ed), sed works by making only one pass over the input(s), and is consequently more efficient.  But it is sed's ability  to  filter text in a pipeline which particularly distinguishes it from other types of editors.
    ​
    #以上内容通过man sed 查找,个人理解:sed命令是一个流式编辑器,擅长处理文本转换,过滤文本信息,sed命令每次只会读取一行文本信息,将当前处理的行存储到“模式空间”中,使用sed命令进行处理,然后将模式空间中的内容输出到屏幕,清空模式空间。读取下一行进行处理。
    
    2、sed命令执行原理  

    创建测试文件,文件内容如下 (注:使用如下文件进行sed命令的解释说明)

    [root@doctor-10 ~/test]# cat >>test.txt <<EOF
    > 1 KOBE MVP
    > 2 CURRY FMVP
    > 3 Irving MVP
    > 4 James MVP
    > 5 KOBE FMVP
    > EOF
    [root@doctor-10 ~/test]# cat test.txt
    1 KOBE MVP
    2 CURRY FMVP
    3 Irving MVP
    4 James MVP
    5 KOBE FMVP

    找出文件中包含 "KOBE"的信息,如下图所述进行原理分析

    注:对上述原理图有问题的可以联系作者,一起讨论

    3、语法结构
    #sed  参数                   脚本                      文件
    sed [OPTION]... {script-only-if-no-other-script} [input-file]...
    4、指令详解
    1. 增:使用指令a(在指定行的后追加内容) i(在指定行的前面添加内容)

      #在文件中第一行前插入  0 ROSE MVP
      [root@doctor-10 ~/test]# sed  '1i0 ROSE MVP' test.txt
      0 ROSE MVP
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      #在test.txt末尾中添加 6 ROSE MVP
      [root@doctor-10 ~/test]# sed  '$a6 ROSE MVP' test.txt
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      6 ROSE MVP
      #在最后一行前面添加  6 ROSE MVP
      [root@doctor-10 ~/test]# sed  '$i6 ROSE MVP' test.txt
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      6 ROSE MVP
      5 KOBE FMVP
      #使用'
      ' 参数可以添加多行内容
      [root@doctor-10 ~/test]# sed '$a6 JORDAN FMVP
      7 ROSE MVP' test.txt
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      6 JORDAN FMVP
      7 ROSE MVP
    2. 删:d(delete 删除)

      #删除指定行的内容
      [root@doctor-10 ~/test]# sed '1d' test.txt
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      #删除第一行到第三行的内容
      [root@doctor-10 ~/test]# sed '1,3d' nba.txt
      4 James MVP
      5 KOBE FMVP
      #删除第二行,第五行的内容
      [root@doctor-10 ~/test]# sed '2d;5d' nba.txt
      1 KOBE MVP
      3 Irving MVP
      4 James MVP 
    3. 改:s/要修改的内容/修改为……/g (s: substitue g:global g为可选参数,如果不加,替换第一次出现的信息)

      #将文件中的所有的KOBE改为Jordan
      [root@doctor-10 ~/test]# sed 's/KOBE/Jordan/g' test.txt
      1 Jordan MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 Jordan FMVP
      1. 根据文件内容进行查找

        #打印文件中包含KOBE行
        [root@doctor-10 ~/test]# sed -n "/KOBE/p" test.txt 
        1 KOBE MVP
        5 KOBE FMVP
        #连续查询,查询KOBE 到Irving之间的连续的行
        [root@doctor-10 ~/test]# sed -n "/KOBE/,/Irving/p" test.txt 
        1 KOBE MVP
        2 CURRY FMVP
        3 Irving MVP
        5 KOBE FMVP
        #不连续查询
        [root@doctor-10 ~/test]# sed -n   "/KOBE/p;/Irving/p" test.txt 
        1 KOBE MVP
        3 Irving MVP
        5 KOBE FMVP
      2. 根据行号进行查询

        #单行内容进行打印
        [root@doctor-10 ~/test]# sed -n "1p" test.txt 
        1 KOBE MVP
        #打印多行内容,连续
        [root@doctor-10 ~/test]# sed -n "1,3p" test.txt 
        1 KOBE MVP
        2 CURRY FMVP
        3 Irving MVP
        #不连续打印
        [root@doctor-10 ~/test]# sed -n "1p;3p" test.txt 
        1 KOBE MVP
        3 Irving MVP
    5、常用参数详解
    1. -i 直接编辑文件同时可以创建备份文件

      -i[SUFFIX], --in-place[=SUFFIX] edit files in place (makes backup if SUFFIX supplied)

      代码案例:

      [root@doctor-10 ~/test]#  sed -i.bak  '$a6 Jordan FMVP' test.txt 
      [root@doctor-10 ~/test]# cat test.txt
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      6 Jordan FMVP
      [root@doctor-10 ~/test]# ls
      test.txt  test.txt.bak
    2. 打印只满足筛选条件的行信息,不会打印模式空间中的所有信息;

      -n, --quiet, --silent  suppress automatic printing of pattern space
    3. -e:可以同时执行多条命令

      -e script, --expression=script add the script to the commands to be executed

      代码案例:

      [root@doctor-10 ~/test]# sed -e '1i0 Jordan FMVP' -e '$a6 ROSE MVP' test.txt
      0 Jordan FMVP
      1 KOBE MVP
      2 CURRY FMVP
      3 Irving MVP
      4 James MVP
      5 KOBE FMVP
      6 Jordan FMVP
      6 ROSE MVP
    4. -r 使用扩展正则表达式符号

       --regexp-extended  use extended regular expressions in the script     

      代码案例:

      #找出test.txt中包含KOBE和Irving的行
      [root@doctor-10 ~/test]# sed -nr '/KOBE|Irving/p' test.txt
      1 KOBE MVP
      3 Irving MVP
      5 KOBE FMVP
      [root@doctor-10 ~/test]#  
  • 相关阅读:
    5种Python使用定时调度任务的方式
    基于Tensorflow + Opencv 实现CNN自定义图像分类
    CANN 5.0硬核技术抢先看
    大力出奇迹,揭秘昇腾CANN的AI超能力
    MSQL:超强的多任务表示学习方法
    Shell:Lite OS在线调试工具知多少
    带你掌握Vue过滤器filters及时间戳转换
    Selenium系列(六) 详细解读强制等待、隐式等待、显式等待的区别和源码解读
    Linux常用命令 top命令详解(重点)
    Selenium系列(一) 详细解读8种元素定位方式
  • 原文地址:https://www.cnblogs.com/Yly-G/p/12382484.html
Copyright © 2011-2022 走看看