zoukankan      html  css  js  c++  java
  • Linux sed命令详解

    sed:
      一种流编辑器,它是文本处理中非常有用的工具,能够完美的配合正则表达式使用,功能不同凡响。
      处理时,把当前处理的行存储在临时缓冲区中,称为『模式空间』(pattern space),
      接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。
      接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。
      sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等。


    替换操作:
      查找替换,只会替换每行第一个匹配的内容
      

    sed 's/old_str/new_str/' filename


      打印被替换的行, -n 和 -p 需要连用
      

    sed -n 's/old_str/new_str/p' filename


      使用g表示会替换每一行中所有匹配的内容
      

    sed 's/old_str/new_str/g' filename


      当需要从一行的某一个匹配开始替换时,使用ng
      

    sed 's/old_str/new_str/ng' filename


      使用-i会直接替换文件中的内容,文件会被改变
      

    sed -i 's/old_str/new_str/g' filename


      命令连用
      

    sed -i 's/old_str/new_str/2g' filename


      把每一行第二个匹配的内容替换,并把修改后的结果保存到文件中
      

    sed -i -n 's/old_str/new_str/2gp' filename


      把每一行第二个匹配并且替换后的内容提取出来,并保存到文件中,
      文件中只有被替换行的内容,没有被修改的行将删除


    删除操作:
      删除空白行

    sed '/^$/d' filename

      删除文件的第二行
      

    sed '2d' filename


      删除第二行到末尾
      

    sed '2,$d' filename


      删除末尾行
      

    sed '$d' filename


      删除匹配的行
      

    sed '/^my/d' filename


    正则表达式匹配:
      使用w+匹配每一个单词,使用[&]替换他, &表示匹配到的单词

    sed 's/w+/[&]/g' filename

      正则匹配到的第一个子串为1,以此类推

      echo this is digit 7 in a number | sed 's/digit ([0-9])/1/'
      this is 7 in a number
      echo aaa BBB | sed 's/([a-z]+) ([A-Z]+)/2 1/'
      BBB aaa


    多表达式:
      sed '表达式' | sed '表达式'
      等价于 sed '表达式;表达式'
      等价于 sed -e '表达式' -e '表达式'


    从文件读入:r命令
      会把文件中的内容显示在匹配行的后面,如果匹配了多行,显示多次
      

    sed '/my/r test.txt' filename


    写入文件:w命令
      会把匹配到的行写入文件中
      

    sed -n '/my/w test.txt' filename

    追加(行下):a命令
      

    sed '/^my/a	his is a test line' filename


      在第二行之后追加
      

    sed '2a	his is a test line' filename


    插入(行上):i命令
      

    sed '/^my/i	his is a test line' filename


    下一个:n命令
      如果my被匹配,则移动到匹配行的下一行,替换这一行this为Tis,并打印
      

    sed '/my/{n; s/this/This/;}' filename


    变形:y命令
      把1到10所有的abcde变成大些ABCDE,正则表达式不能使用这个命令
      

    sed '1,10y/abcde/ABCDE/' filename

      不加1,10表示匹配所有

    退出:q命令
      打印到第三行退出
      

    sed '3q' filename


    打印奇数行:

      sed -n 'p;n' filename

    打印偶数行:

      sed -n 'n;p' filename




  • 相关阅读:
    我爱Java系列之---【SpringBoot打成war包部署】
    279. Perfect Squares
    矩阵dfs--走回路
    112. Path Sum
    542. 01 Matrix
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    Invert Binary Tree
    563 Binary Tree Tilt
    145 Binary Tree Postorder Traversal
  • 原文地址:https://www.cnblogs.com/djoker/p/9407079.html
Copyright © 2011-2022 走看看