• sed


    sed{
    #高级编辑命令
    h: 模式空间覆盖保持空间
    H:模式空间追加保持空间
    g:保持空间取出覆盖至模式空间
    G:保持空间取出追加至模式空间
    x: 模式空间互换保持空间
    n: 读取匹配到的行的下一行至模式空间
    N:读取匹配到的行和下一行至模式空间
    d: 删除模式空间中的行
    D:删除多行模式空间中的所有行
    sed 'n;d' test.txt  #显示基数行
    sed -n '1~2p' test.txt  #显示基数行
    sed -n 'n;p' ip #显示偶数行
    sed -n '2~2p' test.txt  #显示偶数行
    sed '1!G;h;$!d' test.txt    #逆序显示文件内容
    sed '$!d' fsta  #取出文件最后一行
    sed 'G' test.txt    #每行追加空白行
    sed '/^$/d;G' test.txt  #每行追加空白行,多行空白行合并一个空白行
     
    #普通参数
    sed '/^#|^$/d' fstab   #删除#和空行
    sed '1,8d' fstab    #1-8行删除
    sed '/^#/d' fstab----->sed -n '/^#/p' fstab #相反
    sed '10a"IP"' fstab    #第10行后追加
    sed '/^tmpfs/a"IP"' fstab  #tmpfs开头的行后增加
    sed '/^tmpfs/aHello
    word' fstab   #追加两行
    sed '/^tmpfs/ihello
    word' fstab #在行前面追加
    sed '/^tmpfs/chello
    word' fstab #替换匹配到的行
    sed '/^tmpfs/w b.txt' fstab #查找出来的行写到b.txt
    sed '/^tmpfs/!d' fstab  #除了tmpfs的行删除
    sed 's/r..t/&er/g' /etc/passwd  #所有r..t的字符串后面加er
    sed 's/^[[:space:]]+//' /boot/grub/grub.conf   #删除每行空白字符开头的空白字符
    echo "/etc/sysconfig" | sed 's#[^/]+$##'   #取出目录
    # 先读取资料、存入模式空间、对其进行编辑、再输出、再用下一行替换模式空间内容
    # 调试工具sedsed (参数 -d)   http://aurelio.net/sedsed/sedsed-1.0
      
    -n   # 输出由编辑指令控制(取消默认的输出,必须与编辑指令一起配合)
    -i   # 直接对文件操作
    -e   # 多重编辑
    -r   # 正则可不转移特殊字符
      
    b    # 跳过匹配的行
    p    # 打印
    d    # 删除
    s    # 替换
    g    # 配合s全部替换
    i    # 行前插入
    a    # 行后插入
    r    # 读
    y    # 转换
    q    # 退出
      
    &    # 代表查找的串内容
    *    # 任意多个 前驱字符(前导符)
    ?    # 0或1个 最小匹配 没加-r参数需转义 ?
    $    # 最后一行
    .*   # 匹配任意多个字符
    (a)   # 保存a作为标签1(1)
      
    模式空间{
      
        # 模式空间(两行两行处理) 模式匹配的范围,一般而言,模式空间是输入文本中某一行,但是可以通过使用N函数把多于一行读入模式空间
        # 暂存空间里默认存储一个空行
        n   # 读入下一行(覆盖上一行)
        h   # 把模式空间里的行拷贝到暂存空间
        H   # 把模式空间里的行追加到暂存空间
        g   # 用暂存空间的内容替换模式空间的行
        G   # 把暂存空间的内容追加到模式空间的行后
        x   # 将暂存空间的内容于模式空间里的当前行互换
        !  # 对其前面的要匹配的范围取反
        D   # 删除当前模式空间中直到并包含第一个换行符的所有字符(/.*/匹配模式空间中所有内容,匹配到就执行D,没匹配到就结束D)
        N   # 追加下一个输入行到模式空间后面并在第二者间嵌入一个换行符,改变当前行号码,模式匹配可以延伸跨域这个内嵌换行
        p   # 打印模式空间中的直到并包含第一个换行的所有字符
      
    }
      
    标签函数{
      
        : lable # 建立命令标记,配合b,t函数使用跳转
        b lable # 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。
        t labe  # 判断分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令出,或者到脚本末尾。与b函数不同在于t在执行跳转前会先检查其前一个替换命令是否成功,如成功,则执行跳转。
      
        sed -e '{:p1;/A/s/A/AA/;/B/s/B/BB/;/[AB]{10}/b;b p1;}'     # 文件内容第一行A第二行B:建立标签p1;两个替换函数(A替换成AA,B替换成BB)当A或者B达到10个以后调用b,返回
        echo 'sd  f   f   [a    b      c    cddd    eee]' | sed ':n;s#([[^ ]*)  *#1#;tn'  # 标签函数t使用方法,替换[]里的空格
        echo "198723124.03"|sed -r ':a;s/([0-9]+)([0-9]{3})/1,2/;ta'  # 每三个字符加一个逗号
      
    }
      
    引用外部变量{
      
        sed -n ''$a',10p'
        sed -n ""$a",10p"
      
    }
    sed -r '/^#|^$/d' /etc/ssh/sshd_config   #不显示空行和#开头行
    sed 10q                                       # 显示文件中的前10行 (模拟"head")
    sed -n '$='                                   # 计算行数(模拟 "wc -l")
    sed -n '5,/^no/p'                             # 打印从第5行到以no开头行之间的所有行
    sed -i "/^$f/d" a                          # 删除匹配行
    sed -i '/aaa/,$d'                             # 删除匹配行到末尾
    sed -i "s/=/:/" c                             # 直接对文本替换
    sed -i "/^pearls/s/$/j/"                      # 找到pearls开头在行尾加j
    sed '/1/,/3/p' file                           # 打印1和3之间的行
    sed -n '1p' 文件                              # 取出指定行
    sed '5iaaa' file                             # 在第5行之前插入行
    sed '5aaaa' file                             # 在第5行之后抽入行
    echo a|sed -e '/a/i'                        # 在匹配行前插入一行
    echo a|sed -e '/a/a'                        # 在匹配行后插入一行
    echo a|sed 's/a/&
    b/g'                       # 在匹配行后插入一行
    seq 10| sed -e{1,3}'s/./a/'                   # 匹配1和3行替换
    sed -n '/regexp/!p'                           # 只显示不匹配正则表达式的行
    sed '/regexp/d'                               # 只显示不匹配正则表达式的行
    sed '$!N;s/
    //'                              # 将每两行连接成一行
    sed '/baz/s/foo/bar/g'                        # 只在行中出现字串"baz"的情况下将"foo"替换成"bar"
    sed '/baz/!s/foo/bar/g'                       # 将"foo"替换成"bar",并且只在行中未出现字串"baz"的情况下替换
    echo a|sed -e 's/a/#&/g'                      # 在a前面加#号
    sed 's/foo/bar/4'                             # 只替换每一行中的第四个字串
    sed 's/(.*)foo/1bar/'                      # 替换每行最后一个字符串
    sed 's/(.*)foo(.*foo)/1bar2/'           # 替换倒数第二个字符串
    sed 's/[0-9][0-9]$/&5'                        # 在以[0-9][0-9]结尾的行后加5
    sed -n ' /^eth|em[01][^:]/{n;p;}'            # 匹配多个关键字
    sed -n -r ' /eth|em[01][^:]/{n;p;}'           # 匹配多个关键字
    echo -e "1
    2"|xargs -i -t sed 's/^/1/' {}    # 同时处理多个文件
    sed '/west/,/east/s/$/*VACA*/'                # 修改west和east之间的所有行,在结尾处加*VACA*
    sed  's/[^1-9]*([0-9]+).*/1/'             # 取出第一组数字,并且忽略掉开头的0
    sed -n '/regexp/{g;1!p;};h'                   # 查找字符串并将匹配行的上一行显示出来,但并不显示匹配行
    sed -n ' /regexp/{n;p;}'                      # 查找字符串并将匹配行的下一行显示出来,但并不显示匹配行
    sed -n 's/(mar)got/1ianne/p'               # 保存(mar)作为标签1
    sed -n 's/([0-9]+).*(t)/21/p'          # 保存多个标签
    sed -i -e '1,3d' -e 's/1/2/'                  # 多重编辑(先删除1-3行,在将1替换成2)
    sed -e 's/@.*//g' -e '/^$/d'                  # 删除掉@后面所有字符,和空行
    sed -n -e "{s/文本(正则)/替换的内容/p}"       # 替换并打印出替换行
    sed -n -e "{s/^ *[0-9]*//p}"                  # 打印并删除正则表达式的那部分内容
    echo abcd|sed 'y/bd/BE/'                      # 匹配字符替换
    sed '/^#/b;y/y/P/' 2                          # 非#号开头的行替换字符
    sed '/suan/r 读入文件'                        # 找到含suan的行,在后面加上读入的文件内容
    sed -n '/no/w 写入文件'                       # 找到含no的行,写入到指定文件中
    sed '/regex/G'                                # 在匹配式样行之后插入一空行
    sed '/regex/{x;p;x;G;}'                       # 在匹配式样行之前和之后各插入一空行
    sed 'n;d'                                     # 删除所有偶数行
    sed 'G;G'                                     # 在每一行后面增加两空行
    sed '/^$/d;G'                                 # 在输出的文本中每一行后面将有且只有一空行
    sed 'n;n;n;n;G;'                              # 在每5行后增加一空白行
    sed -n '5~5p'                                 # 只打印行号为5的倍数
    seq 1 30|sed  '5~5s/.*/a/'                    # 倍数行执行替换
    sed -n '3,${p;n;n;n;n;n;n;}'                  # 从第3行开始,每7行显示一次
    sed -n 'h;n;G;p'                              # 奇偶调换
    seq 1 10|sed '1!G;h;$!d'                      # 倒叙排列
    ls -l|sed -n '/^.rwx.*/p'                     # 查找属主权限为7的文件
    sed = filename | sed 'N;s/
    /	/'             # 为文件中的每一行进行编号(简单的左对齐方式)
    sed 's/^[ 	]*//'                             # 将每一行前导的"空白字符"(空格,制表符)删除,使之左对齐
    sed 's/^[ 	]*//;s/[ 	]*$//'                 # 将每一行中的前导和拖尾的空白字符删除
    sed '/{abc,def}/[111,222]/s/^/00000/'      # 匹配需要转行的字符: } / [
    echo abcd\nabcde |sed 's/\n/@/g' |tr '@' '
    '        # 将换行符转换为换行
    cat tmp|awk '{print $1}'|sort -n|sed -n '$p'           # 取一列最大值
    sed -n '{s/^[^/]*//;s/:.*//;p}' /etc/passwd          # 取用户家目录(匹配不为/的字符和匹配:到结尾的字符全部删除)
    sed = filename | sed 'N;s/^/      /; s/ *(.{6,})
    /1   /'   # 对文件中的所有行编号(行号在左,文字右端对齐)
    /sbin/ifconfig |sed 's/.*inet addr:(.*) Bca.*/1/g' |sed -n '/eth/{n;p}'   # 取所有IP
      
    修改keepalive配置剔除后端服务器{
      
        sed -i '/real_server.*10.0.1.158.*8888/,+8 s/^/#/' keepalived.conf
        sed -i '/real_server.*10.0.1.158.*8888/,+8 s/^#//' keepalived.conf

    原文链接:http://www.cnblogs.com/oyoui/p/6598911.html

  • 相关阅读:
    【集合】元组元素命名
    普通数组-队列
    稀疏数组
    Java基础 07 API概述 Scanner类 Random类 ArrayList类
    Java基础 06 类与对象、封装、构造方法
    Java基础 05 数组
    Java基础 04 IDEA、方法
    Java基础 04 [附] IDEA 的安装、配置与使用
    Java基础 03 流程控制语句
    Java基础 02 数据类型转换、运算符、方法入门
  • 原文地址:https://www.cnblogs.com/zhongbokun/p/9527334.html
Copyright © 2020-2023  润新知