Tag: sed

  • sed命令用法及示例

    sed–文件流编辑器,过滤和改变文本

    gnu的说明文档:http://www.gnu.org/software/sed/manual/sed.html

    sed可删除(delete)、改变(change)、添加(append)、插入(insert)、合并、交换文本中,可替换(substuite)它们当中的字串、转换(tranfer)其中的字母。

    sed由标准输入读入一行资料并放入pattern space时,依照设定好的规则,逐一对pattern space内的资料执行编辑后标准输出;接着再将下一行资料读入。如此重执行上述动作直到处理完成。即:

    (1)sed总是以行对输入进行处理
    (2)sed处理的不是原文件而是原文件的拷贝

    用法: sed [OPTION]… {script-only-if-no-other-script} [input-file]
    即: sed 选项 执行方法 执行文件

    sed -e 表示不会修改文件,操作的对像是读取的文件

    sed -i 表示in-place,就地修改,所以要小心使用

    直接上实例,以下实例都用sed -i,要来就来真的,更高级的用法需要学习正则表达式。

    删除

    删除第x行,x是数字;如删除第25行

    sed -i '25d' filename

    删除第n到m行;如删除第20到30行

    sed -e '20,30d' filename

    删除第一行到最后一行,不过没多大意义

    sed -e '1,$d' filename

    删除包含abc的所有行

    sed -e '/abc/d' filename

    删除不含有字符串abc的所有行

    sed -e '/abc/!d' filename

    替换

    替换字符串的参数为s(string),替换行的命令为c;后面g表示匹配所有

    将第一行替换为#!/bin/bash

    sed -i '1c\#!/bin/bash' filename

    将第1到10行替换成 i love you

    sed -i '1,10c\I love you' filename

    将第12行中的dz,换为xxx

    sed -i "12s/dz/xxx/g" /web/club/config.php

    将文件中39-41行的apache换为nginx

    sed -i "39,41s/apache/nginx/g" /etc/php-fpm.d/www.conf

    替换/home下所有文件中的www.jpuyy.com为jpuyy.com,要小心使用

    sed -i "s/www.jpuyy.com/jpuyy.com/g" `grep www.jpuyy.com -rl /home`

    将每行的行首插入#,虽然这是插入,但其实也是替换

    sed -i 's/^/\#/' test

    把单引号变为双引号

    sed -i 's/'"'"/'"''/g' filename

    把双引号变为单引号

    sed -i 's/''"'/"'"'/g' filename

    插入(insert)

    在第10行前面插入一行,并写入 I am the ten line.

    sed -i '10i\ I am the ten line.' filename

    在所有的girls前面插入一行,并写入beautiful

    sed -i '/girls/i\beautiful' filename

    追加(append)

    在第一行加入I am line 2.

    sed -i '1a\I am line 2.' filename

    在含有oooo的行的后面插入一行,并写入xxxx

    sed -i '/oooo/a\xxxx' filename
    sed -i '/Port\ 22/ a Port\ 5277' /etc/ssh/sshd_config

    sed 取 xml 中的 value

    echo '<id>I am a sample group</id>' | sed 's/<\/\?[^>]\+>//g'

    基本的先学到这,有时候编写脚本的时候,需要使用双引号而不是单引号。sed还有很多高级的命令,越高级杀伤力越大。

    查看文件

    查看第90-100行

    cat filename | sed -n '90,100p'

    查看第2行

    cat filename | sed -e '2!d'
    
    cat filename | sed -n '2p'