码迷,mamicode.com
首页 > 其他好文 > 详细

sed 行编辑器知识汇总

时间:2016-01-28 07:09:46      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:sed

    sed 是一种行编辑器,一次处理一行内容,处理时把当前处理的行存储在一个临时缓冲区,称为“模式空间”(pattern space),接着用sed命令处理模式空间中的内容,处理完成后把模式空间中的内容打印到屏幕上,完成一行的编辑。
    注:默认情况下sed并不做原地修改,不会修改源文件

sed有两种使用方法

    sed [options] command file(s)    直接编写处理命令处理
    sed [options] -f scriptfile file(s)    使用预先编写好的sed脚本处理

    options:
        -n    静默模式,不输出内容到屏幕
        -e    多点编辑,一次编辑运行多个编辑命令
        -f    指定预先写好的sed‘脚本
        -r    使用扩展的正则表达式
        -i    修改源文件

    地址定界
        1、不给地址:对全文进行处理
        2、单地址:
            #:第#行
            /pattrern/:被此处模式匹配到的每一行
        3、地址范围:
            #,#
            #,+#
            /pat1/,/pat2/
            #,/pat1/
        4、~ 步进
            sed -n ‘1~2p‘ file     显示基数行
            sed -n ‘2~2p‘ file     显示偶数行

[root@makeISO mage]# cat 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ 99
1 X 1 = 1     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
[root@makeISO mage]# sed -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ -e ‘/^9/p‘ 99
1 X 1 = 1     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed -i -n -e ‘1p‘ -e ‘3,4p‘ -e ‘6,+1p‘ -e ‘/^9/p‘ 99
[root@makeISO mage]# cat 99
1 X 1 = 1     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed -n ‘1~2p‘ 99
1 X 1 = 1     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed -n ‘2~2p‘ 99
2 X 1 = 2     2 X 2 = 4     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64


    编辑命令:
        d:    删除
             cat -n /etc/passwd |sed ‘1,8d‘     删掉第1-8行
             sed ‘/^$/d‘ /etc/fstab         删掉空行
             sed ‘/^#/d‘ /etc/fstab            删掉#开头的行

[root@makeISO mage]# sed ‘3,9d‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
[root@makeISO mage]# sed -e ‘/^1/d‘ -e ‘/^3/d‘ -e ‘/^5/d‘ -e ‘/^7/d‘ -e ‘/^9/d‘ 99
2 X 1 = 2     2 X 2 = 4     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64

 

        p:    显示模式空间中的内容
            cat -n /etc/passwd |sed ‘1,8p‘         显示全文加匹配到的行
            cat -n /etc/passwd |sed -n ‘1,8p‘     仅显示匹配到的行
            sed -n ‘#p‘ 与 sed ‘#d‘             显示结果正好相反

[root@makeISO mage]# sed -n ‘1,5p‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
[root@makeISO mage]# sed ‘1,5d‘ 99
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81

 

       a:     \text    在指定行后面追加一行或多行文本(\n)
            sed -n ‘/^UUID/a \new line 1‘ /etc/fstab
            sed -n ‘/^UUID/a \new line 1\nnew line 2‘ /etc/fstab

[root@makeISO mage]# sed  ‘/^5/a newline1‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
newline1
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed  ‘/^5/a newline1\nnewline2‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
newline1
newline2
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


        i:     \text    在指定行前面插入一行或多行文本(\n)
            sed -n ‘/^UUID/i \new line 1‘ /etc/fstab
            sed -n ‘/^UUID/i \new line 1\nnew line 2‘ /etc/fstab

[root@makeISO mage]# sed  ‘/^5/i newline1‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
newline1
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed  ‘/^5/i newline1\nnewline2‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
newline1
newline2
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


        c:    \text     替换指定行尾一行或多行文本(\n)
            sed -n ‘/^UUID/c \new line 1‘ /etc/fstab
            sed -n ‘/^UUID/c \new line 1\nnew line 2‘ /etc/fstab

[root@makeISO mage]# sed ‘/^5/c newline1‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
newline1
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed ‘/^5/c newline1\nnewline2‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
newline1
newline2
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


        w:    保存模式空间中内容到指定文件
            sed -n  ‘/^UUID/w file‘ /etc/fstab

[root@makeISO mage]# sed -n ‘2~2p‘ 99
2 X 1 = 2     2 X 2 = 4     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
[root@makeISO mage]# sed -n ‘2~2w file‘ 99
[root@makeISO mage]# cat file 
2 X 1 = 2     2 X 2 = 4     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64

 

       =:    显示模式空间中行的行号
            sed   ‘/^UUID/=‘ /etc/fstab

[root@makeISO mage]# sed -n ‘/^5/=‘ 99
5


        r:    读取文件到符合匹配条件的每一行后
            sed ‘6r file‘ /etc/fstab     读取file内容插入到fstab文件第6行后面

[root@makeISO mage]# cat file 
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
[root@makeISO mage]# sed ‘^6r file‘ 99
sed: -e expression #1, char 1: unknown command: `^‘
[root@makeISO mage]# sed ‘6r file‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed ‘/^6/r file‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


        !:    对地址定界取反
            cat -n /etc/passwd |sed ‘1,8!d‘     删掉第1-8行以外的行

[root@makeISO mage]# sed  ‘1~2d‘ 99
2 X 1 = 2     2 X 2 = 4     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
[root@makeISO mage]# sed  ‘1~2!d‘ 99
1 X 1 = 1     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


        s///:    替换,支持其他分隔符 s@@@ s###
            替换标记:
            g:    行内全局替换
            i:    忽略字符大小写

[root@localhost ~]# sed -n ‘s@r..t@&+++++++++++++@gp‘ /etc/passwd
root+++++++++++++:x:0:0:root+++++++++++++:/root+++++++++++++:/bin/bash
operator:x:11:0:operator:/root+++++++++++++:/sbin/nologin
ftp:x:14:50:FTP User:/var/ft+++++++++++++p:/sbin/nologin
[root@makeISO mage]# sed ‘s/X/*/‘ 99
1 * 1 = 1     
2 * 1 = 2     2 X 2 = 4     
3 * 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 * 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 * 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 * 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 * 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 * 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 * 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed ‘s/X/*/g‘ 99
1 * 1 = 1     
2 * 1 = 2     2 * 2 = 4     
3 * 1 = 3     3 * 2 = 6     3 * 3 = 9     
4 * 1 = 4     4 * 2 = 8     4 * 3 = 12     4 * 4 = 16     
5 * 1 = 5     5 * 2 = 10     5 * 3 = 15     5 * 4 = 20     5 * 5 = 25     
6 * 1 = 6     6 * 2 = 12     6 * 3 = 18     6 * 4 = 24     6 * 5 = 30     6 * 6 = 36     
7 * 1 = 7     7 * 2 = 14     7 * 3 = 21     7 * 4 = 28     7 * 5 = 35     7 * 6 = 42     7 * 7 = 49     
8 * 1 = 8     8 * 2 = 16     8 * 3 = 24     8 * 4 = 32     8 * 5 = 40     8 * 6 = 48     8 * 7 = 56     8 * 8 = 64     
9 * 1 = 9     9 * 2 = 18     9 * 3 = 27     9 * 4 = 36     9 * 5 = 45     9 * 6 = 54     9 * 7 = 63     9 * 8 = 72     9 * 9 = 81     
[root@makeISO mage]# sed ‘s/x/*/g‘ 99
1 X 1 = 1     
2 X 1 = 2     2 X 2 = 4     
3 X 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 X 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 X 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 X 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 X 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 X 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 X 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81     
[root@makeISO mage]# sed ‘s/x/*/gi‘ 99
1 * 1 = 1     
2 * 1 = 2     2 * 2 = 4     
3 * 1 = 3     3 * 2 = 6     3 * 3 = 9     
4 * 1 = 4     4 * 2 = 8     4 * 3 = 12     4 * 4 = 16     
5 * 1 = 5     5 * 2 = 10     5 * 3 = 15     5 * 4 = 20     5 * 5 = 25     
6 * 1 = 6     6 * 2 = 12     6 * 3 = 18     6 * 4 = 24     6 * 5 = 30     6 * 6 = 36     
7 * 1 = 7     7 * 2 = 14     7 * 3 = 21     7 * 4 = 28     7 * 5 = 35     7 * 6 = 42     7 * 7 = 49     
8 * 1 = 8     8 * 2 = 16     8 * 3 = 24     8 * 4 = 32     8 * 5 = 40     8 * 6 = 48     8 * 7 = 56     8 * 8 = 64     
9 * 1 = 9     9 * 2 = 18     9 * 3 = 27     9 * 4 = 36     9 * 5 = 45     9 * 6 = 54     9 * 7 = 63     9 * 8 = 72     9 * 9 = 81     
[root@makeISO mage]# sed ‘s/x/*/i‘ 99
1 * 1 = 1     
2 * 1 = 2     2 X 2 = 4     
3 * 1 = 3     3 X 2 = 6     3 X 3 = 9     
4 * 1 = 4     4 X 2 = 8     4 X 3 = 12     4 X 4 = 16     
5 * 1 = 5     5 X 2 = 10     5 X 3 = 15     5 X 4 = 20     5 X 5 = 25     
6 * 1 = 6     6 X 2 = 12     6 X 3 = 18     6 X 4 = 24     6 X 5 = 30     6 X 6 = 36     
7 * 1 = 7     7 X 2 = 14     7 X 3 = 21     7 X 4 = 28     7 X 5 = 35     7 X 6 = 42     7 X 7 = 49     
8 * 1 = 8     8 X 2 = 16     8 X 3 = 24     8 X 4 = 32     8 X 5 = 40     8 X 6 = 48     8 X 7 = 56     8 X 8 = 64     
9 * 1 = 9     9 X 2 = 18     9 X 3 = 27     9 X 4 = 36     9 X 5 = 45     9 X 6 = 54     9 X 7 = 63     9 X 8 = 72     9 X 9 = 81


    高级命令
        h:    把模式空间内容覆盖到保持空间
        H:    把模式空间中的内容追加到保持空间
        g:    从保持空间中取回内容覆盖到模式空间
        G:    从保持空间中取回内容追加到模式空间
        x:    包模式空间和保持空间的内容互换
        n:    读取匹配到行的下一行覆盖至模式空间
        N:    读取匹配到行的下一行追加至模式空间
        d:    删除模式空间中的行
        D:    删除多行模式空间中的所有行

            sed -n ‘n;p‘ file     显示偶数行

[root@localhost ~]# cat -n /etc/passwd | sed -n ‘n;p‘
2    bin:x:1:1:bin:/bin:/sbin/nologin
4    adm:x:3:4:adm:/var/adm:/sbin/nologin
6    sync:x:5:0:sync:/sbin:/bin/sync
8    halt:x:7:0:halt:/sbin:/sbin/halt
10    uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin


            sed ‘1!G;h;$!d‘ file     逆向显示文件内容

[root@localhost ~]# cat qq
1
2
3
4
5
6
[root@localhost ~]# cat qq | sed ‘1!G;h;$!d‘
6
5
4
3
2
1


            sed ‘$!N;$!D‘ file     取文件后两行

[root@localhost ~]# cat qq
1
2
3
4
5
6
[root@localhost ~]# cat qq | sed ‘$!N;$!D‘
5
6


            sed ‘$!d‘ file     取文件最后一行


[root@localhost ~]# sed ‘$!d‘ qq
6
[root@localhost ~]#


            sed ‘G‘ file    每行下面添加空白行


[root@localhost ~]# cat qq | sed ‘G‘
1
2
3
4
5
6
[root@localhost ~]#


            sed ‘/^$/d;G‘ file 删除已有空行,然后给每行添加空行

[root@localhost ~]# cat qq 
1
2
3
4
5
6
[root@localhost ~]# sed ‘/^$/d;G‘ qq
1
2
3
4
5
6
[root@localhost ~]#


            sed ‘n;d‘ file     取基数行

[root@localhost ~]# sed ‘n;d‘ qq
1
3
5
[root@localhost ~]#


            sed -n ‘1!G;h;$p‘ file     逆序显示文件内容

[root@localhost ~]# sed -n ‘1!G;h;$p‘ qq
6
5
4
3
2
1
[root@localhost ~]#


    练习:
        1、删除某文件中以空白开头的行的行首的空白字符

[root@localhost ~]# cat qq
    1
  2
 3
     4
  5
     6
[root@localhost ~]# sed ‘s/^[[:space:]]\+//‘ qq
1
2
3
4
5
6
[root@localhost ~]#


        2、删除某文件中所有以# 开头,后面至少跟一个空白字符的行行首的#和空白字符

[root@localhost ~]# cat qq
#  1
# 2
#3
# 4
#  5
#   6
[root@localhost ~]# sed ‘s/^#[[:space:]]\+//‘ qq
1
2
#3
4
5
6
[root@localhost ~]#


        3、echo一个绝对路径,分别取其基名和目录名

[root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo/ |sed  ‘s@[^/]\+/\?$@@‘
/etc/sysconfig/network-scripts/
[root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo |sed  ‘s@[^/]\+/\?$@@‘
/etc/sysconfig/network-scripts/
[root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo |sed -e ‘s@/$@@‘ -e ‘s@.*/@@‘
ifcfg-lo
[root@localhost ~]# echo /etc/sysconfig/network-scripts/ifcfg-lo/ |sed -e ‘s@/$@@‘ -e ‘s@.*/@@‘
ifcfg-lo





sed 行编辑器知识汇总

标签:sed

原文地址:http://www1707.blog.51cto.com/1184226/1739394

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!