sed简单用法

来源:互联网 发布:酷狗总提示网络异常 编辑:程序博客网 时间:2024/05/22 17:25

sed 流编辑器

        流编辑器不同于交互式编辑器,处理前要事先确定数据匹配方式和执行的命令。即在处理前要先提供规则

        

    格式:

        sed [option] '[address]{command}' [filename]

 

        如:

        [root@t176 script]# sed -n '/^r/p' /etc/passwd

        root:x:0:0:root:/root:/bin/bash

        rpc:x:32:32:Portmapper RPC user:/:/sbin/nologin

        rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin

 

    执行多条命令:

        方法一:加 -e 参数

        

        echo "The triger cubs will meet on Tuesday ater school" | 

        sed -e 's/triger/wolf/' -e 's/ater/berfore/'

 

        The wolf cubs will meet on Tuesday berfore school

       方法二:命令用分号分隔

        echo "The triger cubs will meet on Tuesday after school" | 

        sed 's/triger/wolf/;s/after/before/'

 

        The wolf cubs will meet on Tuesday before school

 

        

sed 地址表示:

        1、行的数值范围 1、2、3  2,4

        2、匹配模式 

           /mode/ 

        

 

        例:显示以a开头的用户

                sed -n '/^a/p' /etc/passwd              

 

sed 工作时,可以将处理命令写到一个文件中

    1、设计一个命令文件 

        cat sed.ctl 

                s/root/abc/

                s/nologin/bash/

                s/sbin/bin/

 

    2、在执行加-f 参数指定命令文件的路径

        sed -f sed.ctl /etc/passwd

 

 

s 替换命令

    格式:s/pattern/replacement/flags

        flags:

                n   第n次出现时替换

                g   全局替换(默认换第一个)

                p   打印被替换的那一行,通常与-n 连用

                w   将替换的结果写到另一个文件

 

       ex:替换第一行的所有空格

                    sed -i '1s/ //g'  file.txt

        替换特殊字符要转义


d 删除命令

    格式:address/d

          1/d

          10,20/d

           /^a/d        

 

 

i 插入

    格式:address i\char

        sed '3i\aaa' 1.txt

 

a 追加

   格式: address a\char

        sed '3a\aaa' 1.txt

 

 

c 修改行

  格式:address c\char

y 变换命令

  格式:address y/old_char/new_char/

    例:写一个加密程序,a-c b-d c-e d-f ...

 

        [root@t176 sed]# cat 2.txt

        my password is uplooking

 

        [root@t176 sed]# sed '1y/abcdefghijklmnopqrstuvwxyz/

                        cdefghijklmnopqrstuvwxyzab/' 2.txt 

 

                oa rcuuyqtf ku wrnqqmkpi

 

 

o       打印文本

=       打印行号

l       显示不可打印的字符

        sed -n '1,10p' /etc/passwd      逗号是范围

        打印1到10行

        sed -n '/^r/p' /etc/passwd      打印以r开头的字符

        

w       写文件

 

        格式: address w file_name

        sed -n '/r/w /root/Desktop/1.txt' /etc/passwd

        将包含r的行写入文件中

 

r       读文件

 

        读到当前

        address r file_name

        sed '3r t2.txt' 1.txt

        sed '/oper/r'



&的用法,将一串字符添加到已有字符的前面

        sed -i 's/abc/ffff&/g' ./test
将ffff添加到abc前面,并且写回原文件。




==================================================


添加一个精确匹配的问题

假如文件里有单词route,同时又存在routes,如何才能只找到route呢

sed -n '/\<route\>/p' test.txt


12.6--增加一个整行替换的问题

加入你的句子里有一个单词work需要替换该词级后面所有的内容,且需要从shell传一个参数进来替换:

注意是双引号

sed -i "s/work.*/g" test.txt                                



12.7--增加一个二进制内容替换或删除的问题

如果你要编辑的文件中有二进制字符,比如^@或者是^E这种东西怎么办呢,其实他们是有对应的ASCII码的。

用vim打开你的文件,将光标移到二进制字符上面按ga可以查看他的二进制字符

sed -i '/\x00/d' test  就将test文件中,含有ASCII码为0的的行删除了,如果是替换为空呢

sed -i's/\x00//g' test


原创粉丝点击