sed

demo

sed -i 's/webapp\/webapp/webapp/gp' `grep -r /home/fox/sbcode *|awk '{print $1}'|tr -d :`

查找目录下所有包含/home/fox/sbcode的文件,然后替换其中的内容webapp/webapp为webapp

basic

sed 是一款流编辑工具,用来对文本进行过滤与替换工作,sed通过输入读取文件内容,但一次仅读取一行,某些指令处理后输出,sed更适合处理大数据文本

工作原理

sed在处理文本的时候,会在内存上创建一个模式空间,然后把这个文件的每一行调入模式空间用相应的命令处理,处理完输出;接着处理下一行,直到最后。

与vim区别

vim需要通知处理问及那的哪几行才去处理,而sed默认处理文件所有的行,除非你告诉它不处理哪几行

base use

1.sed [option] [定址commands] [inputfile]

2. option
    -n 关闭默认输出,将自动打印所有行
    -e 多点编辑,允许多个脚本指令被执行
    -r 支持扩展正则+?(){}|
    -i 修改源文件
    -f 支持使用脚本

3. 定址 commands
    3.1定址,1,2个,通知sed去处理哪几行
        0个,处理所有行
        1个,处理行号所在行
        2个,行号,正则表达式,处理被行号或正则匹配的行

    3.2.command
        p   打印行
        d   删除
        s   替换
        n   替换第几个匹配内容
        w   另存为
        a   之前添加一行
        i   之前行插入文本
        y   替换匹配内容

examples

p 与 -n

cp /etc/passwd t1
1.cat n t1|sed -n '1,3p'
    打印1-3行

2.cat -n t1|sed -n '/lp/,/halt/p'
    查看passwd文件的lp~halt行

3.cat -n t1|sed -n '1~2p'
    打印基数行

4.sed -n '/x:[01]:/p' t1
    打印 x:0 或 x:1 的行

d

1.cat -n t1|sed '1d'
    删除第一行

2.cat -n t1|sed -e '1d' -e '3d'
    删除第一行和第三行(与-e选项合用)

3.cat -n t1|sed '1d;3d'
    ;选项的使用和-e一样

4.cat -n t1|sed '1!d'
    取反,除了第一行,其他都删除

s

语法 '[address]s/pattern/replacement/flags'
                old     new
flags:
    n: 1-512 表示替换模式里面出现的第几次内容
    p:打印
    g:全局修改
    w:另存为

demo

1.sed 's/root/ROOT/' t1
    替换第一个root-> ROOT

2.sed 's/root/ROOT/g' t1
    替换所有的root->ROOT

3.sed 's/root/ROOT/2' t1
    替换第二个匹配

4.sed 's/root/ROOT/p' t1
    打印
    ROOT:x:0:0:root:/root:/bin/bash
    ROOT:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin‘


5.sed -n 's/root/ROOT/p' t1
    ROOT:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/ROOT:/sbin/nologin

6.sed -n 's/root/ROOT/w/tx' t1
  cat tx
    ROOT:x:0:0:root:/root:/bin/bash
    operator:x:11:0:operator:/ROOT:/sbin/nologin
    另存为tx文件

7.sed 's/^/#/' t1
    在文件的每行前面添加 # 注释

8.sed 's/^.//1' t1
    删掉文件的第1个字符

9.sed 's/.//2' t1

i

1.sed '1i hello' t1
    在第一行插入hello
    hello
    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin

a 从当前行后面插入

1.sed '1a hello' t1
    在第二行插入hello
    root:x:0:0:root:/root:/bin/bash
    hello
    bin:x:1:1:bin:/bin:/sbin/nologin

-r 支持扩展正则

1.sed -r 's/^(.)(.)/\1/' t1
    //相当于把前两个字符替换成第一个字符,这样就实现了删除第二个字符

y

1.  sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' t1
    ROOT:X:0:0:ROOT:/ROOT:/BIN/BASH
    BIN:X:1:1:BIN:/BIN:/SBIN/NOLOGIN
    DAEMON:X:2:2:DAEMON:/SBIN:/SBIN/NOLOGIN
    替换所有的小写字母

替换匹配行

sed -n '1c ROOT' t1

q 退出

sed '1q' t1

-i

sed -i 's/1/A/g' tx
修改源文件中1->A

-f 支持脚本

sed -f sed.sh tx

results matching ""

    No results matching ""