sed 流式编辑器

sed 流式编辑器,非交互式的修改文本,逐行操作,增删改查
使用方式
    一、前置命令 | sed 选项(定址符)指令
    二、sed | 选项(定址符)  文本
        选项
            -n 屏蔽默认输出
            -r 支持扩展正则
            -i 写入文件
        指令
            p  输出指定内容  往往和-n配合使用
            sed 'p' txt         //输出所有行两次
            sed -n '1p' txt     //输出一次第一行的内容
            sed '1p' txt        //输出第一行两次
            sed '1,2p' txt      //输出1到2行
            sed '1,3p' txt      //输出1到3行
            df | sed -n '1p'    //输出df指令生成的文本中第1行
            sed -n '1,+4p' txt  //输出1行以及之后的4行的内容 , 共5行内容
            sed -n '1p;3p' txt  //输出1行和3行
            sed -n '1~2p'  txt  //输出1行,3行,5行,奇数行
            sed -n '2~2p'  txt  //输出2行,4行,6行,偶数行
        
        使用正则匹配(不带颜色)
            sed -n '/^root/p' txt  //匹配以root开头的字符串
            sed -n '/root$/p' txt  //匹配以root结尾的字符串
            sed -n '$=' txt        //显示行号,文本共多少行  等同于  cat /etc/passwd | wc -l
            sed -n '=' txt            //逐行显示行号
            sed -n '$=' /etc/passwd   //查看主机所有账户
        指令 d   删除内容 不加-n,否则看不到对应的操作
            sed '2,5d' txt  //删除2之后的5行
            sed '1~2d' txt  //删除奇数行
            sed '2~2d' txt  //删除偶数行
            sed '2,+4d' txt //删除第二行之后的4行内容
            sed -r '/^root | bash/' txt //删除以root开头的行或者有bash的行
            sed '3,5d' a.txt    //删除3到5行
            sed '/xml/d' a.txt  //删除有xml的行
            sed '/xml/!d' a.txt //删除没有xml的行
            sed '/^install/d' a.txt //删除以install开头的行
            sed '$d' a.txt        //删除最后一行
            sed '/^$/d' a.txt    //删除文档中所有的空行
        
        指令
            s  替换
            sed 's/old/new/' 
            
            sed "s/2017/AAA/" abc  //abc文件中的每一行的第一个2017替换成AAA
            sed "2s/2017/BBB/" abc //第二行的第一个2017替换成BBB
            sed "3s/2017/BBB/" abc //第三行的第一个替换成BBB
            sed "3s/2017/BBB/g" abc //第三行的全部2017替换成BBB
            sed "3s/2017/BBB/1" abc //第三行的第一个2017替换成BBB
            sed "3s/2017/BBB/2" abc //第三行的第二个2017替换成BBB
            sed "3s/2017/BBB/3;2" abc //error
            sed "3s/2017/BBB/{3;2}" abc //error
            sed "3s/2017/BBB/{3:2}" abc //error
            sed "3s/2017/BBB/2|3" abc     //error
            sed -e "3s/2017/BBB/2|3" abc //error
            sed -e "3s/2017/BBB/#1" abc //第三行的第一个2017替换成BBB
            sed -e "3s/2017/BBB/1;3s/2017/BBB/2" abc //第三行的第一个2017替换成BBB(这一句执行完成后,减少了一个2017),后一句对的2要知道什么意思;
            sed "1s/\/bin/bash/\/sbin/sh" txt //error
            sed "1s/%:*/\/sbin/sh" txt //error
            sed 1s/%:*/\/sbin/sh' txt //error
            sed 's//bin/bash//sbin/sh/' txt //error
            sed 's&/bin/bash&/sbin/sh/' txt  //error
            sed 's&/bin/bash&/sbin/sh&' txt //为避免替换,键盘上的1-0之键上任意字符都可以用作替换符号;
            sed 's@/bin/bash@/sbin/sh@' txt //用@做替换符
            sed 's(/bin/bash(/sbin/sh(' txt //用(做替换符
            
            sed -n 's/root/8888/p'  /etc/passwd  //把/etc/passwd文档每一行的root替换成8888
            sed '4,7s/^/#/' txt    //在文档txt的4行到7行上添加注释
            
            
            sed 's/a//2;s/$//' 0508 
            sed 's/$2//2;s/$//' 0508 
            sed 's/.//2;s/$.//' 0508 
            sed 's/.//$;s/.$//' 0508 
            sed 's/.//2;s/.$//' 0508 
            sed 's/.//2;s/.$//' 0508 
            sed 's/.//2;s/.$//' 0508 
            sed 's/[0-9]//g' 0508 
            
        \(\):保留  复制 \1 \2 \3:粘贴
        ():划分范围     增强正则表达
            egrep "(bin:/){2}" txt     //找两个连续的(bin:/)
            sed -r 's/^(.)(.*)(.)$/\3\2\1/' txt //把txt文档中的每行的第一个字符和最后一个字符交换位置
            sed -r 's/^(.)(.*)(.)$/\2\3\1/' txt //把txt文档中的每行的第2个字符和第3个字符交换位置
            sed -r 's/^(.)(.*)(.)$/\3\2/' txt     //把txt文档中的最后一个字符放到首位;
            sed -r 's/({A-Z})/[\1]/g' txt       //把txt文档中大写字母全部加上括号;
            
        a:行后追加
            sed 'a 888' txt   //每行后面都添加888
            sed '2a 888' txt  //第二行后面添加888
            sed '1,2a 888' txt //在1到2行下添加888
        i:行前添加    
            sed 'i 888' txt    //在每行上一行添加888
            sed '3i 888' txt   //在第三行上面添加888
            sed '/A/a 888' txt   //在有A的行下添加888
        c:替换行
            sed 'c 999' txt     //所有行替换成999
            sed '1c 888' txt     //第一行替换成888


sed的高级用法
    
 

你可能感兴趣的:(shell,运维)