【linux_笔记】Linux_sed(流编辑器)基本用法

学习资源来自:www.magedu.com

学习记录过程中难免出现错误,如有发现,还望大神们指出。

示例操作部分有的与历史操作有关,如果先前的示例操作没有执行过的话,可能会有部分示例的操作无法执行。示例仅供参考。(练习题在附录)


sed基本用法:


sed: Stream EDitor(流编辑器)
    行编辑器 (全屏编辑器: vi)
    
sed: 默认不编辑原文件,仅对模式空间中的数据做处理;而后,处理结束后,将模式空间打印至屏幕;
        (模式空间 ―― 内存空间)


sed [options] 'AddressCommand' file ...      (默认显示模式空间中的内容)
    -n: 静默模式,不再默认显示模式空间中的内容
    -i: 直接修改原文件
    -e SCRIPT -e SCRIPT:可以同时执行多个脚本
    -f /PATH/TO/SED_SCRIPT(保存着多个脚本)
        sed -f /path/to/scripts  file
    -r: 表示使用扩展正则表达式
    
    Address:(地址定界的常用表示方法)
        1、StartLine,EndLine(起始行,结束行)
            比如1,100
            $:最后一行
        2、/RegExp/(使用正则表达式来指定的模式)
            /^root/
        3、/pattern1/,/pattern2/
            第一次被pattern1匹配到的行开始,至第一次被pattern2匹配到的行结束,这中间的所有行
        4、LineNumber
            指定的行
        5、StartLine, +N
            从startLine开始,向后的N行;
    
    Command:
        d: 删除符合条件的行;
        p: 显示符合条件的行;
        a \string: 在指定的行后面追加新行,内容为string
            \n:可以用于换行
        i \string: 在指定的行前面添加新行,内容为string
        r FILE: 将指定的文件的内容添加至符合条件的行处
        w FILE: 将地址指定的范围内的行另存至指定的文件中;
        s/pattern/string/修饰符: 查找并替换,默认只替换每行中第一次被模式匹配到的字符串
        加修饰符:
            g: 全局替换
            i: 忽略字符大小写
        s///: s###, s@@@……    (只要三个都一样,很多字符都可以用)
            \(\), \1, \2 (后项引用)
        &: 引用模式匹配整个串
        
        示例:
        cat /etc/fstab
        sed '1,2d' /etc/fstab ―― 删除1,2行
        sed '/oot/d' /etc/fstab ―― 删除含有oot字符串的行
        sed '1,+2d' /etc/fstab ―― 删除第一行和第一行往后两行
        sed '/^\//d' /etc/fstab ―― 删除以/开头的行
        sed '/^\//p' /etc/fstab ―― 显示模式空间上的内容+输出到屏幕上的内容
        sed -n '/^\//p' /etc/fstab ―― 不显示模式空间的内容
        sed '/^\//a \#hello world' /etc/fstab ―― 在以/开头的行后面添加字符串
        sed '/^\//a \#hello world\n#hello world' /etc/fstab ―― \n表示换行
        sed '2r /etc/issue' /etc/fstab ―― 在fstab第2行后面将issue整个插入
        sed '$r /etc/issue' /etc/fstab ―― 在末尾插入(合并)
        sed '1,2r /etc/issue' /etc/fstab ―― 分别在1、2行后面插入
        sed -n '/oot/w /tmp/oot.txt' /etc/fstab ―― 将fstab下匹配oot的行令存至oot.txt中
        cat /tmp/oot.txt
        
        sed 's/oot/OOT/' /etc/fstab ―― 用OOT替换oot
        sed 's/^\//#/' /etc/fstab ―― 将以/开头的行中的/替换成#
        sed 's/\//#/' /etc/fstab ―― 替换每一行第一次被匹配到的字符串
        sed 's/\//#/g' /etc/fstab ―― 替换每一行所有被匹配到的字符串
        sed 's@/@#@g' /etc/fstab
        
        nano sed.txt
            hello,like
            hi,my love
        sed 's#l..e#l..er#g' sed.txt ―― 替换字符串不能使用正则表达式
        sed 's#l..e#&r#g' sed.txt ―― 用l..er替换每一行所有被匹配到的字符串

        sed 's#\(l..e\)#\1r#g' sed.txt
        sed 's#l\(..e\)#L\1#g' sed.ext ―― 将l..e的l替换成L
        history | sed 's#^[[:space:]]*##g' | cut -d' ' -f1 ―― 显示历史记录的编号
           







你可能感兴趣的:(command,Address,流编辑器(sed))