zoukankan      html  css  js  c++  java
  • Shell 05 Sed

    一.基本用方法
    1.sed文本处理工具的用法
    用法1:前置命令 | sed  [选项]  '条件指令'
    用法2:sed  [选项]  '条件指令'  文件.. ..
    注意:没有条件时候,默认所有条件,默认输出全部,默认修改临时文件
    2.基本选项
    -n 静默输出,屏蔽默认输出
    -r 支持扩展正则
    -i 直接修改源文件
    行号案例:
    # sed -n '1p'       /etc/hosts        ---> 输出第一行
    # sed -n '3,6p'     /etc/passwd       ---> 输出4行(3.4.5.6)
    # sed 'd'           /etc/passwd       ---> 删除所有行(源文件无变化)
    # sed -i '1,3d'     /1.txt            ---> 删除源文件1-3行
    # sed -n '1p;4p'    /etc/passwd       ---> 输出第1、第4行
    # sed -n '3,+10p'   /etc/passwd       ---> 打印第3行以及后面的10行(从第4行开始的10行)
    # sed -n '1~2p'     /etc/passwd       ---> 打印所有的奇数行
    # sed -n '2~2p'     /etc/passwd       ---> 打印所有的偶数行
    正则案例:
    # sed -n '/bash/p'  /etc/passwd       ---> 打印包含bash的行
    # sed -n '/bash$/p' /etc/passwd       ---> 打印以bash结尾的行
    # sed -n '/^bash/p' /etc/passwd       ---> 打印以bash开头的行
    # sed -n '/^bash/!p' /etc/passwd      ---> 打印以非以bash开头的行
    # sed -n 'p'        /etc/passwd       ---> 没有条件,表示匹配所有
    # sed -n '$='       /etc/passwd       ---> 输出文件的行数 == cat /etc/passwd | wc -l
    正则案例: d 删除指令 (不加 -n,不加p)
    # sed '3,5d'        a.txt             ---> 删除3-5行
    # sed '3d;5d;'      a.txt             ---> 删除第3行、第5行
    # sed '/xml/d'      a.txt             ---> 删除包含xml的行
    # sed '/xml/!d'     a.txt             ---> 删除不包含xml的所有行
    # sed '$d'          a.txt             ---> 删除文件的最后一行
    # sed '/^$/d'       a.txt             ---> 删除所有空行
    正则案例: s 替换指令
    # sed 's/111/qqq/'  a.txt             ---> 将每行的第1个111替换为qqq
    # sed 's/111/qqq/3' a.txt             ---> 将每行的第3个111替换为qqq
    # sed 's/111/qqq/g' a.txt             ---> 将所有的111都替换为qqq
    # sed 's/111//g'    a.txt             ---> 将所有的111都替换成空格(1个为1空格)
    # sed '1,3s/^/# /'  a.txt             ---> 给1-3行的开头添加“ # ”,即注释掉
    # sed '1,3s/^# //'  a.txt             ---> 将1-3行开头的注释去掉
    # sed -n 's/2017//2p'  a.txt          ---> 将每行第2个2017替换成空格并只显示改过的行
    # cat a.txt | sed -n '/^d/p' | tr [a-z] [A-Z] --->找到以d开头的行,统一大写输出
    # cat a.txt | tr 'A-Z' 'a-z'   ==  tr 'A-Z' 'a-z' < cat a.txt --->大写转小写 
    替换操作的分隔“/”可改用其他字符,如#、&等
    # sed 's#/bin/bash#/sbin/sh#' a.txt   ---> 将/bin/bash替换为/sbin/sh
    正则实例1:# cat 2.txt
    Hello world
    ni hao beijing
    # sed 's/./8/8'        2.txt          ---> 将每行中第8个字符替换成8 (空格算一个字符)
    # sed 's/.//2;s/.$//'  2.txt          ---> 将每行第2个字替空;将每行最后字替空
    # sed -r 's/^(.)(.)(.*)(.)$/13/'      2.txt  将每行第2个字替空;将每行最后字替空
    正则实例2:将文件中每行的第一个、倒数第1个字符互换
    # sed -r 's/^(.)(.*)(.)$/321/'       2.txt
    正则实例3:删除所有数字、行首空格  (尽量多用*)
    # sed -r 's/[0-9]//g;s/^[ ]*//'      2.txt
    # sed -r 's/[0-9]//g;s/^ +//'          2.txt
    # sed -r 's/[0-9]//g;s/^( )+//'        2.txt
    # sed -r 's/[0-9]//g;s/^( )*//'        2.txt
    正则实例4:每行第1个数字、行首空格  (尽量多用*)
    sed -r 's/[0-9]//;s/[[:space:]]//' a.txt
    删除所有数字、所有空格
    # sed -r 's/[0-9]//g;s/[[:space:]]*//g' 2.txt
    # [:alnum:] 所有的字母和数字
    # [:alpha:] 所有的字母
    # [:blank:] 所有呈水品呈现的空白字符
    # [:cntrl:] 所有的控制字符
    # [:digit:] 所有的数字
    # [:graph:] 所有的打印字符,不包含空格
    # [:lower:] 所有的小写字母
    # [:print:] 所有的可打印字符,包括空格
    # [:punct:] 所有的标点字符
    # [:space:] 所有呈水平、或垂直排列的空白字符
    # [:upper:] 所有的大写字母
    # [:xdigit:] 所有的16进制数
    #  [=字符=]   所有和指定字符串相等的字符
    正则实例3:为文件中每个小写字母添加括号
    # sed -r 's/([a-z])/(1)/g'             2.txt
    全添加:
    # sed -r 's/([a-zA-Z0-9])/(1)/g'       2.txt
     
    二.sed多行文本处理
    2.1 基础语法
    # sed [选项] '条件指令' 文件..
      sed工具的多行文本处理操作:
         i:在指定的行之前插入一行对应文本
         a:在指定的行之后插入一行对应文本
         c:替换指定的行
    案例:
    # sed '2a XX'     a.txt ---> 在第2行后面追加一行:XX
    # sed '2i XX'     a.txt ---> 在第2行前面追加一行:XX
    # sed '2c XX'     a.txt ---> 将第2行替换为:XX
    # sed 's/$/EEE/'  a.txt ---> 将EEE追加到每一行后
    # sed '1s/^/EEE/' a.txt ---> 将EEE追加到第一行前   
    # m: 每一行前隐藏了一个"^" ;每一行后隐藏了一个"$".
    2.2 文件读写
    r:读取文件
    # sed '3r b.txt'  2.txt ---> 将b.txt的内容读如到2.txt的第3行【要-i,如果不加行号(数字),但一定要有r,默认给每一行行后(插入)读一遍) 】   
    2.3 复制和粘贴
    #:h 覆盖的复制
    #:H 追加的复制 (不会覆盖剪切板里面的东西,即剪切版里面的还行还在,换行+内容)
    #:g 覆盖的粘贴 (替换原来行内容)
    #:G 追加的粘贴  (在行后插入对应内容)
    案例:
    # sed '1h;3G'     1.txt ---> 将文件的第1行插到第3行后面,即增加1行
    # sed '1H;3G'     1.txt ---> 在第3行后插入换行和第1行内容(默认有个换行)
    # sed '1h;3g'     1.txt ---> 用第1行的内容替换第3行的内容
  • 相关阅读:
    Asp.Net MVC 路由
    EntityFramework执行SQL语句
    partial类与[MetadataType(typeof(类名))]有什么区别?
    Asp.net mvc + .net ef database first 或 model first 时如何添加验证特性
    Entity Framework 学习总结之一:ADO.NET 实体框架概述
    C#中dynamic的正确用法
    Func与Action
    SVN的使用和问题解决方法总结
    微信小程序---绘图
    微信小程序---动画
  • 原文地址:https://www.cnblogs.com/luwei0915/p/10496655.html
Copyright © 2011-2022 走看看