首页 > 代码库 > sed

sed

sed是一种支持正则表达式的非交流式编辑器stream editor

sed的常用选项

-n     只显示匹配处理的行(否则会输出所有)

-e     执行多个编辑命令时(一般用 ; 代替)

-i      直接在文件中进行修改,而不是输出到屏幕

-r     支持扩展正则表达式

-f      从脚本文件中读取内容并执行(文件中的编辑命令每行一个,不用 ; 隔开)

sed的常用编辑命令

p      打印匹配行

d      删除指定行

a      在匹配行后面追加

i       在匹配行前面插入

c      整行替换

r      将文件的内容读入

w     将文本写入文件

s      字符串替换(匹配正则表达式)

  1. sed的p命令示例

    sed -n ‘/模式/p‘   输入文件

    这里的模式可以是正则表达式也可以是精确字符

    模式用/括起,扩展正则要加-r选项

    示例:sed -n ‘$p‘ /etc/passwd   显示最后1行
            sed -n ‘3,10!p‘ /etc/passwd    显示除了3-10行的内容
            df -h |sed -n ‘/\/$/p‘   显示以/结尾的行
            a=/dev/shm
            sed -rn "s|$a|yy|; /yy/p" /etc/fstab

  2. sed的d命令示例

    删除操作可以根据行号和模式匹配进行操作

    示例:sed ‘3,5d‘ /etc/fstab

            sed ‘/2/d‘ /etc/fstab

            sed -r ‘/^$|^#/d‘ /etc/fstab

            sed -e ‘/^$/d‘ -e ‘/^#/d‘ /etc/inittab

  3. sed的a命令示例

    追加操作可以根据行号和模式匹配进行操作

    示例:sed ‘1a 111111‘ passwd         在第一行后面追加后面的字符串

            sed ‘/root/a 111111‘ passwd

  4. sed的i命令示例

    插入操作可以根据行号和模式匹配进行操作

    示例:sed ‘/defaults/i 111111‘ fstab

  5. sed的c命令示例

    更改整行操作可以根据行号和模式匹配进行操作

    示例:sed ‘/id:/c id:5:initdefault:‘ /etc/inittab     将id:所在行整行替换成后面的字符串

  6. sed的r命令示例

    读入操作可以根据行号和模式匹配进行操作

    示例:sed ‘$r /etc/hosts‘ /etc/fstab            在fstab文件的末尾后面读入hosts文件的内容

  7. sed的s命令语法格式

    sed -n [行号或模式]s/查找内容/替换内容/[替换标记]   文件

    替换操作可以根据行号和模式匹配进行操作

    替换标记有4种:

    数字:替换每行的第几个

    g:全局替换,否则只替换第一个字符串。ng从第n个开始替换

    p:显示被执行替换操作的行和-n合用

    w:将执行替换操作的行输出到指定文件

    i:不区分大小写

    示例:sed -n "1,10s/^#//p" /etc/passwd      将注释行的#去掉

            sed -n "1,10s/$/?/p" /etc/passwd        在每行末尾加上?

    sed的s命令可以使用任意分隔符作为定界符

    sed -n ‘/^hello/s|/bin/bash|/sbin/nologin|p‘ /etc/passwd 

  8. sed命令疑难问题

    $ sed -ir ‘/^H+/a 1111‘ /etc/sysconfig/network
    $ cat /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=yy.sxjy.com

    $ ls network
    network          networking/      networkr         network-scripts/

    注意:-ir选项不会追加成功,会生成一个-r文件
    $ sed -ri ‘/^H+/a 1111‘ /etc/sysconfig/network
    $ cat /etc/sysconfig/network
    NETWORKING=yes
    HOSTNAME=yy.sxjy.com
    1111

    注意:-ri选项会追加成功,不会生成另一个文件         所以要将r选项放在前面

  9. sed命令中包含变量

    有变量一定要用""

  10. sed的命令中取反操作   !

  11. sed的命令中&的用法

    &用于表示替换命令中的匹配模式

    echo "i have a fat cat" |sed ‘s/.at/".at"/g‘
    i have a ".at" ".at"
    $ echo "i have a fat cat" |sed ‘s/.at/"&"/g‘
    i have a "fat" "cat"

    sed -rn ‘s/\<[0-9]{3}\>/&0/gp‘ passwd         将所有3位数字后面加个0

  12. sed的s命令中支持\t\n

    sed -n ‘s/^xixi/\n 1111/p‘ passwd

    sed ‘s/^abrt.*/&\n/‘ passwd

  13. sed的命令中标签的用法

    标签可以方便在后面引用,每行指令最多使用9个标签


本文出自 “爱武装一辈子” 博客,请务必保留此出处http://menglinux.blog.51cto.com/8733806/1531720