sed学习

版权声明: https://blog.csdn.net/LEEZHEJUE/article/details/82184219

sed命令的执行过程:按行读取文件到模式空间(临时缓存)并进行匹配,执行sed内的命令,从模式空间打印结果到屏幕。
命令用法:sed  [选项]  [sed内置命令]  [输入文件]

   增删改查
        a)    增
            a    追加文本到指定行后
            i    插入文本到指定行前


                    单行增加
                        sed ‘2a xiaoming’name.txt        #在name文件的第二行后追加xiaoming
                        sed    ‘2i xiaoming’name.txt        #在name文件的第二行前插入xiaoming 


                    多行增加
                        1.使用\n进行多行增加
                        sed  '2a xiaoming\nxiaohua\nxiaohong' name.txt
                        2.使用\加回车进行多行增加
                        sed ‘2a xiaoming\回车
                        >xiaohua\回车
                        >xiaohong’name.txt


                    指定执行的地址范围进行修改
                        用法: n1[,n2] {sed内置命令}
                        地址用逗号分隔,n1,n2可以用数字、正则表达式、或二者的组合表示

                    重要用法:
                    10{sed内置命令}            #对第10行操作
                    10,20{ sed内置命令}        #对第10到20行(包括10,20行)操作
                    10,+20{ sed内置命令}        #对第10到30行进行操作
                    1~2{ sed内置命令}        #对第1,3,5,7….行进行操作
                    10,${ sed内置命令}        #对第10到最后行进行操作
                    /xiaoli/{ sed内置命令}        #对匹配xiaoli行进行操作
                    /xiaoli/,/xiaohua/{ sed内置命令}        #对匹配xiaoli到xiaohua行进行操作
                    /xiaoli/,${ sed内置命令}    #对匹配xiaoli行到最后行进行操作
                   /xiaoli/,10{ sed内置命令}    #对匹配xiaoli行到第10行进行操作,如果前10行没有xiaoli则会显示10行后匹配到xiaoli的行

                    1,/xiaoli/{ sed内置命令}    #匹配第1行到匹配xiaoli行进行操作
                    /xiaoli/,+2{ sed内置命令}    #对匹配xiaoli行及其后2行进行操作        
        

            
        b)    删
                    d    删除指定行
                    sed 'd'    name.txt                #删除文件所有行
        
        c)   改
            按行替换    
                    c 用新行取代旧行
                    sed '2c xiaoli'    name.txt        #把第2行替换为xiaoli
                
            文本替换
                    s:单独使用时将每一行中第一处匹配的字符串进行替换,是sed内置命令
                    g:每一行进行全部替换,是sed内置命令s的替换标志之一,非sed内置命令
                    -i:修改文件内容,sed命令的选项(不加只会在临时缓存中修改)
                用法:(A被替换为B)
                    sed -i 's#A#B#g'        name.txt        (并非必须使用定界符#也可使用其他符号#显眼而已)

                            A处能用正则而B不能使用正则
              

            变量替换
                    sed "s#$x#$y#g"    #先读取变量然后进行修改,注意为双引号    
            分组替换
                    \( \) 和    \1的使用说明:
                        \(\)可以记住正则表达式的一部分,\1则视为第一个记住的匹配内容,\2为第二个
                        最多可以记9个
                    例子:echo 'I am xiaoli student' |sed 's#^.*am \(.*\) stu.*$#\1#g'
                             输出为  xiaoli                
                        注意:其中匹配是的空格等信息,可以在sed中加入-r选项使用扩展正则,\(\)可替换为()     
                                echo 'I am xiaoli student' |sed -r 's#^.*am (.*) stu.*$#\1#g'
                    特殊符号&代表被替换的内容
                                sed '1,3s#xiaoli#--&--#g'    name.txt            #将1到3行的xiaoli换成--xiaoli--
                                sed 's#xiao(.*)$#&#g'                #&就将匹配xiaoli整一个部分
                可用来批量重命名名字有规律的文件:
                                     touch xiaoli{1..5}.txt
                                     ls *.txt |sed -r 's#xiaoli(.*)$#mv & \1#g'
                                     输出为:
                                    mv xiaoli1.txt 1.txt
                                    mv xiaoli2.txt 2.txt
                                    mv xiaoli3.txt 3.txt
                                    mv xiaoli4.txt 4.txt
                                    mv xiaoli5.txt 5.txt        #使用bash即可重命名        ls *.txt |sed -r 's#xiaoli(.*)$#mv & \1#g'|bash
        
        d)查
                按行查询
                    p 输出指定内容,但默认会输出两次匹配的结果所以用n
                    n 取消默认输出
                        sed -n '2p' name.txt                #显示第二行
                按字符串查询
                        sed -n '/li/p' name.txt                #匹配有字符串li的行
                混合查询

                     结合上面的按地址等方法来匹配行

猜你喜欢

转载自blog.csdn.net/LEEZHEJUE/article/details/82184219
sed