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




  • 相关阅读:
    【数据结构】10.java源码关于LinkedHashMap
    【数据结构】9.java源码关于HashTable
    【数据结构】8.java源码关于HashMap
    【数据结构】7.java源码关于LinkedList
    【LEETCODE】69、动态规划,easy,medium级别,题目:198、139、221
    【LEETCODE】68、动态规划,medium级别,题目:95、120、91
    【LEETCODE】67、分治递归,medium&hard级别,题目:215、312
    【数据结构】6.java源码ArrayList
    【LEETCODE】66、字符串分类,hard级别,题目:32,72,76
    mysql查询所有表数据大小
  • 原文地址:https://www.cnblogs.com/djoker/p/9407079.html
Copyright © 2011-2022 走看看