• Linux shell sed 命令详解


     详细的sed命令详解,请参考https://my.oschina.net/u/3908182/blog/1921761

    sed命令的正则表达式实践

    https://www.cnblogs.com/zoe233/p/11920446.html

    sed命令常见用途

    1. 查找关键词做全局替换
    2. 查找某行的关键词做替换
    3. 查找关键字所在行,并且执行指定关键字的替换
    4. 在某行之后追加
    5. 查找关键字,并且在第二行追加
    6. 删除包含关键字的行
    7. 查看指定的行
    8. 在最后一行追加
    9. sed -e 参数,屏幕输出,一次更改多替换文本中多个值

    1. 查找关键词做全局替换

    sed -i 's/GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config

    2. 查找/etc/crontab 第17行,并且把0,30替换为15,45

    sed -i '17s/0,30/15,45/' /etc/crontab

    3. 查找/etc/crontab 中的关键字script.sh,并且把15,45替换为0,30

    sed -i '/script.sh/s/15,45/0,30/' /etc/crontab

    4. 在第17行后添加新的 一行内容

    sed -i '17a * * * * root /root/test.sh' /etc/crontab

    5. 在/etc/crontab中查找关键字script,并且该关键字的下一行追加一行新内容

    sed -i '/^.*script.*$/a30,45 * * * * root /root/check.sh' /etc/crontab

    6. 在/etc/crontab中查找关键字check.sh,并且把这行的内容替换掉

    sed -i '/^.*script.*$/c30,45 * * * * root /root/check.sh' /etc/crontab

    7.  在/etc/crontab中查找关键字check.sh,并且删除该行

    sed -i '/check.sh/d' /etc/crontab

    8. 显示第17到18行之间的内容

    sed -n '17,18p' /etc/crontab

    9. 在最后一行追加一行0 * * * * root /root/check.sh

    sed -i '$a * * * * root /root/check.sh' /etc/crontab

     10. sed 命令处理换行符,例如替换或者删除

    sed ':label;N;s/
    /:/;b label' filename
    sed ':label;N;s/
    /:/;t label' filename

    上面的两条命令可以实现将文件中的所有换行符替换为指定的字串,如命令中的冒号。命令的解释:
    :label; 这是一个标签,用来实现跳转处理,名字可以随便取(label),后面的b label就是跳转指令
    N; N是sed的一个处理命令,追加文本流中的下一行到模式空间进行合并处理,因此是换行符可见
    s/ /:/; s是sed的替换命令,将换行符替换为冒号
    b label 或者 t label b / t 是sed的跳转命令,跳转到指定的标签处
    标签跳转和N的追加命令实现了每一行的不间断放入模式处理空间,从而不会漏掉每一个换行符,而没有标签的话跳转的话,就只能每两行替换掉一个换行符,对比效果:

    $  echo "a,b,c,d" |sed 's/,/
    /g'|sed ':x;N;s/
    /,/;b x'
    a,b,c,d
    $  echo "a,b,c,d" |sed 's/,/
    /g'|sed 'N;s/
    /,/'
    a,b
    c,d

     10. sed -e参数,并不真正编辑源文件,只是屏幕输出

    一条sed命令,删除/etc/passwd第三行到末尾的数据,并把bash替换为blueshell

    nl /etc/passwd | sed -e '3,$d' -e 's/bash/blueshell/'
    1  root:x:0:0:root:/root:/bin/blueshell
    2  daemon:x:1:1:daemon:/usr/sbin:/bin/sh

    e表示多点编辑,第一个编辑命令删除/etc/passwd第三行到末尾的数据,第二条命令搜索bash替换为blueshell。

    如果只是处理一个东西,可以省略-e ,接多个就不能省略

  • 相关阅读:
    STL容器内数据删除
    grep 同时满足多个关键字和满足任意关键字
    程序运行栈空间不足程序崩溃问题
    VS2010中设置程序以管理员身份运行
    python 包详解
    select 详解
    Hdu 1166
    CF1204C
    CF1204B
    CF1204A
  • 原文地址:https://www.cnblogs.com/faberbeta/p/sed001.html
Copyright © 2020-2023  润新知