zoukankan      html  css  js  c++  java
  • sed流编辑器

    sed 是一种在线编辑器,它一次处理一行内容。
    处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有 改变,除非你使用重定向存储输出。
    sed主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

    sed命令的格式

    • sed 选项 '动作' 文件名
    • cat 文件名 | sed 选项 '动作'

    选项:
    -n :只显示被修改的行的内容
    -e :直接在命令列模式上进行 sed 的动作编辑;
    -f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
    -r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
    -i :直接修改读取的文件内容,而不是输出到终端。

    动作:
    a :在指定行后 新增一行或多行内容
    c :替换指定行的内容
    d :删除指定行的内容
    i :在指定行之前 插入一行或多行内容
    s :替换指定内容

    删除行内容

    1、删除行内容删除第2行的内容

    • cat file.txt | sed '2d'
    • sed '2d' file.txt

    2、删除第2-5行的内容

    • cat file.txt | sed '2,5d'
    • sed '2,5d' file.txt

    3、删除第2行到最后一行的内容

    • cat file.txt | sed '2,$d'
    • sed '2,$d' file.txt

    新增、插入 行内容

    1、在第2行后新增内容

    • cat file.txt | sed '2a hello world'

    2、在第2行前插入内容

    • cat file.txt | sed '2i hello world

    3、在第2行后新增2行内容

    • cat file.txt | sed '2a hello world'

    替换行内容

    1、把第2行的内容替换为 hello world

    • cat file.txt | sed '2c hello world'

    2、把第2-5行的内容替换为 hello world

    • cat file.txt | sed '2,5c hello world'

    3、只显示被修改的行的内容

    • cat file.txt | sed -n '2c hello world'

    搜索指定内容

    1、搜索含有abc的行

    • cat file.txt | sed -n '/abc/p'

    2、搜索并删除指定内容

    • cat file.txt | sed '/abc/d'

    替换指定内容

    1、默认只替换每行中模式首次匹配的内容

    • cat file.txt | sed 's/abc/'替换后的内容'/'

    2、g标记可以使sed执行全局替换

    • cat file.txt | sed 's/abc/'替换后的内容'/g'

    3、g标记可以使sed替换第N次出现的匹配

    • sed 's/abc/xxx/2g' file.txt

    直接操作文件内容(危险动作)

    1、直接删除文件内容

    • sed -i '2,5d' file

    2、直接替换文件内容

    • sed -i 's/abc/xxx/g' file

    在sed中使用正则表达式

    1、搜索并删除空行

    • sed '/^$/d' file.txt

    2、替换3位数的数字

    [root@linuxprobe test_shell]# cat b.txt
    a 1 b 22 c 333 d 4444
    [root@linuxprobe test_shell]# sed 's/[0-9]{3}/666/g' b.txt
    a 1 b 22 c 666 d 4444
    
    [root@linuxprobe test_shell]# cat file
    a1
    b22
    c333
    d4444
    ab12abc123abcd1234
    [root@linuxprobe test_shell]# sed 's/[0-9]{3}/666/g' file
    a1
    b22
    c666
    d6664
    ab12abc666abcd6664

    3、操作文件内容时,备份原文件

    [root@linuxprobe test_shell]# cat file
    xxx 123 xxx123 123xxx
    [root@linuxprobe test_shell]# sed -i.bak 's/abc/xxx/g' file
    [root@linuxprobe test_shell]# cat file
    xxx 123 xxx123 123xxx
    [root@linuxprobe test_shell]# ls
    b.txt  file  file.bak  test.sh
    [root@linuxprobe test_shell]# cat file.bak
    xxx 123 xxx123 123xxx

    4、已匹配字符串标记( & )

    在 sed 中 & 指代模式所匹配到的字符串

    [root@linuxprobe test_shell]# cat file
    abc 123 abc123 123abc
    [root@linuxprobe test_shell]# sed 's/abc/[&]/g' file
    [abc] 123 [abc]123 123[abc]

    5、子串匹配标记( 1  2 3 ......)

    在sed中 1  2 3 指代出现在括号中的部分正则表达式所匹配到的内容

    [root@linuxprobe test_shell]# echo abc 123 | sed 's/abc ([0-9])/1/'
    123

    对于匹配到的第一个子串,其对应的标记是 1 ,匹配到的第二个子串是 2 ,往后以此类推。

    [root@linuxprobe test_shell]# echo HELLO world | sed 's/([A-Z]+) ([a-z]+)/2 1/'
    world HELLO

    6、组合多个表达式

    [root@linuxprobe test_shell]# echo abc 123 | sed 's/[a-z]+/xxx/' | sed 's/[0-9]+/666/'
    xxx 666
    [root@linuxprobe test_shell]# echo abc 123 | sed 's/[a-z]+/xxx/;s/[0-9]+/666/'
    xxx 666
    [root@linuxprobe test_shell]# echo abc 123 | sed 's/[a-z]+/xxx/;s/[0-9]+/666/'
    xxx 666

    7、引用变量

    [root@linuxprobe test_shell]# echo user | sed "s/user/$USER/"
    root

    备注:在双引号中,可以引用变量。



  • 相关阅读:
    C# 模拟串口发送接收
    maven update解决TypeMismatchException
    [转载]JUnit3 与 JUnit4 的区别
    JUnit版本导致eclipse的build path加入的Maven Dependencies没起作用
    [转载][oracle]使用exp导出数据的日志中报warning如EXP-00091 Exporting questionable statistics
    [框架][MyBatis]MyBatis集锦
    [转载][工具]Secure CRT 自动记录日志和时间戳功能配置的方法
    jUnit Test遇到org.apache.ibatis.binding.BindingException
    [转载[工具]]PLSQL使用技巧
    [转载][工具]Eclipse Console 加大显示的行数,禁止弹出
  • 原文地址:https://www.cnblogs.com/lfjn/p/11455970.html
Copyright © 2011-2022 走看看