zoukankan      html  css  js  c++  java
  • linux基础之sed

    sed: Stream EDitor,行编辑器
    用法: sed [option]... 'script' inputfile...
    script: '地址命令'

        常用选项: 
            -n: 不输出模式中的内容至屏幕
            -e: 多点编辑
            -f: /path/to/script_file:从指定文件中读取编辑脚本
            -r: 支持使用扩展正则表达式
            -i:原处编辑,慎用
    
            地址定界:
                1. 不给地址,对全文进行处理
                2.单地址
                    #:指定的行
                    /pattern/: 被此处模式所能匹配到的每一行
                3.地址范围:
                    #,#
                    #,+#
                    /pat1/,/pat2/
                4.~:步进
                    1~2
                    2~2
        
    编辑命令:
        d: 删除
            # sed /^UUID/d /tmp/fstab 删除UUID开头的行
            # sed '/^$/d' /tmp/fstab 删除空白行
            # sed '1,4d' /tmp/fstab
        p: 显示模式空间中的内容
            # sed '/^UUID/p' /tmp/fstab
            这样会显示两遍,默认会打印模式空间中的内容,可以使用-n不显示模式空间中的内容就只会输出一遍
        a 	ext: 在行后面追加文本,支持使用
    实现多行追加
            # sed '/^UUID/a hello' /etc/fstab 在fstab中UUID行后面添加hello
        i 	ext: 在行前面插入文本,支持使用
    实现多行插入
            # sed '/^UUID/i hello' /etc/fstab 在fstab中UUID行前面插入hello
        c 	ext: 替换行为单行或多行文本
            # sed '/^UUID/c uuid' /etc/fstab 把fstab中UUID改为小写
        w /path/to/somefile: 保存模式空间匹配到的行至指定文件中
            # sed '/^UUID/w /etc/issue' /etc/fstab   读取fstab中符合UUID的行存放到issue中
        r /path/from/somefile:读取指定文件的文本流至模式空间中匹配到的行的行后
            # sed '6r /etc/issue' /etc/fstab 读取issue中的内容放到fstab中的第六行行后
        =: 为模式空间中的行打印行号
        !: 取反条件
        s///: 支持使用其他分隔符,s@@@,s###
            替换标记
                g: 行内全局替换
                p: 显示替换成功的行
                w /PATH/TO/SOMEFILE: 将替换成功的结果保存至指定文件中
                    # sed 's@^UUID@uuid@' /tmp/fstab  UUID替换为小写
    
        练习1:删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符
                # sed 's@^[[:space:]]+@@' /boot/grub/grub.conf
        练习2:删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 
                # sed 's@^#[[:space:]]+@@' /etc/fstab   
        练习3:echo一个绝对路径给sed命令,取出其基名,取出其目录名
                # echo "/etc/home/dir/base.name/" | sed 's@[^/]+/?$@@'
    
    高级编辑命令
        h: 模式空间中的内容覆盖至保持空间中
        H: 模式空间中的内容追加至保持空间中
        g: 保持空间中的内容覆盖至模式空间
        G: 保持空间中的内容追加至模式空间
        n: 读取匹配到的行的下一行覆盖至模式空间中
        N: 读取匹配到的行的下一行追加至模式空间中
        d: 删除模式空间中的行
        D: 删除多行模式空间中的所有行
        x: 把模式空间中的内容与保持空间中的内容互换
    
          举例:
                sed -n 'n;p' FILE:显示偶数行
    	sed '1!G;h;$!d' FILE: 逆向显示文件内容
    	sed '$!N;$!D' FILE:取出文件后两行
    	sed '$!d' FILE: 取出文件最后一行
    	sed 'G' FILE: 每行下面添加一个空白行
    	sed '/^$/d;G' FILE 多个空白行合并成一个
    	sed 'n;d' FILE: 显示奇数行
    	sed -n '1!G;h;$p' FILE:逆向显示文件中的每一行
  • 相关阅读:
    如何将SLIC集成到ESXi中
    System Board Replacement Notice
    分发器上的会话代理进程控制脚本使用说明
    lib和dll的区别与使用
    vs2017自动生成的#include“stdafx.h”详解及解决方案
    禅定是否一定要打坐,为什么?
    PE文件解析 基础篇
    灵修书籍
    HDU 2546 饭卡(01背包裸题)
    codeforces 767A Snacktower(模拟)
  • 原文地址:https://www.cnblogs.com/ckh2014/p/10760394.html
Copyright © 2011-2022 走看看