zoukankan      html  css  js  c++  java
  • Sed 的常用方法

    Sed:

     演示文件: passwd

     

     -n  关闭自动打印     开头 ^  空行 ^$  结尾或最后一行$

    p 打印

    1 sed 'p' passwd 默认自动打印,p重复操作
    2 sed -n 'p' passwd 自动打印不做,p继续打印
    3 sed -n '2p' passwd  关闭自动打印,只打第2行
    4 sed -n '2p' 默认键盘会等着输入,输入的东西只打印第2 行

      挑选出IP地址第二行

    1 ifconfig ens33 |sed -n '2p'

     列出1~10 并挑选出最后一行

    1 seq 10 |sed -n '$p'
    2 seq 10 |tail -n1

     挑选出包含*的行

    1 ifconfig ens33 |sed -n '/netmask/p' 挑选出包含netmask 的行
    2 sed -n '/^2/p' passwd 挑选包含2开头的行

      显示2~4行

    1 sed -n '2,4p' passwd

     显示1开头的到3开头的信息(数字可以更改为字母)

    sed -n '/^1/,/^3/p' passwd

      sed -n '/^r/,/^p/p' /etc/passwd

    挑选出日志文件中,几点几分到几点几分的日志行(如需要另存可使用重定向 > >>)

    sed -n '/^Jul 17 12:30:01/,/^Jul 17 13:40:01/p' /var/log/messages

    第1行开始到1+3行打印

    sed -n '1,+3p' passwd

    打印第一行开始,每隔两行显示,~步进

    sed -n '1~2p' passwd

    d 删除

    seq 10 |sed  '1~2d'        删除1开始每隔两个删除
    ss -nt  |sed  '1d'         删除第一行
    sed  '/^#/d' /etc/fstab    删除#开头的行删除
    cat /etc/fstab |sed  '/^#/d'|sed '/^$/d'    删除#号开头的行和空开头的行
    sed '/^#/d;/^$/d' /etc/fstab  删除#号开头的行和空开头的行

    a      追加 符合条件的行后面追加

    c   追加 符合条件的行前追加

    i    直接修改文件

    i.bak  先备份原文件在修改文件(bak为后缀,后缀随便什么)

    替换SELINUX=这行为 SELINUX=enforcing

    sed -i '/^SELINUX=/c SELINUX=enforcing ' /etc/selinux/config 
    sed -i '/^SELINUX=/c SELINUX=disable' /etc/selinux/config 替换为disable
    从第一行起没隔3行追加 base(直接修改原文件)
    sed -i.bag '1~3a base' passwd
    最后一行添加别名 vi=vim 
    sed -i '$a alias vi=''vim''' /root/.bashrc
    在root 行开头追加一行
    sed -i '/^root/a test ' passwd 
    在listen 80后面添加8080
    sed -i '/^Listen 80/a Listen 8080 ' /etc/httpd/conf/httpd.conf

     w /path/file 保存模式匹配的行至指定文件

    sed '/^#/d;w /data/f1' /etc/httpd/conf/httpd.con 挑选出#号开头的,并另存为/data/f1
    r /path/file 读取指定文件的文本至模式空间中匹配到的行后
    seq 3 |sed '2~2r /etc/issue'  在2 行面添加etc/issue
    = 为模式空间中的行打印行号
    sed -n '/root/=' /etc/passwd 符合的行,的行号打印
    ! 模式空间中匹配行取反处理

    seq 10 |sed -n '1~2!p' 取反
    s/// 查找替换,支持使用其它分隔符,s@@@,s###

    搜索替代 ,第一个斜杠和第二个之间放的要搜索的东西,第二个和第三个之间放的要替代的东西
    替换标记:
    g 行内全局替换
    p 显示替换成功的行
    w /PATH/FILE 将替换成功的行保存至文件中
    全局搜索root 替换成ROOT
    sed  's/root/ROOT/g' /etc/passwd 
    sed -n 's/root/ROOT/gp' /etc/passwd
    搜索第二行全局替换任意字符开头到inet 替换为空 搜索空格到netmask后面全部,替换为空
    ifconfig ens33 |sed -n '2s/^.*inet //;s/ netmask.*//p'
    -e 多点编辑
    ifconfig ens33 |sed -n 2p |sed -e 's/^.*inet //' -e 's/ netmask.*//' 加-e 多个命令执行,和;没区别
    ifconfig ens33 |sed -nr '2s/(^[^0-9]+)([0-9.]+)( .*$)/2/p'
    使用扩展正则表达式加r ,第二行 ,全局搜索
    匹配,非数字开头的多个    数字和点,多个    最后空格点* 分成组 留下第二个组打印
    ifconfig ens33 |sed -nr '2s/^[^0-9]+([0-9.]+).*$/1/p' 分组分成一个组,直接挑选第一个组
    挑选出文件夹名 
    echo /etc/sysconfig/network-scripts/|sed -r 's@(^/.*/)([^/]+)/?$@2@'
    's@@@'搜索
    (^/.*/ )行首到/
    ([^/]+/)?$   非/最后/ 可能有可能没有?$可能有可能没有
    2 取2
    1 取1
    sed -rn '/^[[:space:]]+linux16/s#(.*)#1 net.ifnames=0#p' grub.cfg
    '/^[[:space:]]+linux16     空格开头的,不确定几个空格+,linux16 
    s###p 搜索打印
    (.*) 任意字符
    1 net.ifnames=0  前面第一个分组,任意字符的意思,加net.ifnames=0
    sed -rn '/^[[:space:]]+linux16/s#.*#& net.ifnames=0#p' grub.cfg
    &表示前面搜索出来的东西
    在原本中间插入字:
    sed -nr '/^GRUB_CM/s@(.*)(")@1 net.ifnames=0"@p' /etc/default/grub
    sed -r '/GRUB_CMDLINE_LINUX/s@"$@ net.ifname=0"@' grub
    搜索变量替换:单引号变量不起作用,替换双引号,或者把变量放到三对单引号之间sed 自己的用法:
    var=root
    sed "s@$var@wang@" /etc/passwd
    sed  's@'''$var'''@wang@' /etc/passwd

    高级编辑命令

    P: 打印模式空间开端至 内容,并追加到默认输出之前

    h: 把模式空间中的内容覆盖至保持空间中

    H:把模式空间中的内容追加至保持空间中
    g: 从保持空间取出数据覆盖至模式空间
    G:从保持空间取出内容追加至模式空间
    x: 把模式空间中的内容与保持空间中的内容进行互换
    n: 读取匹配到的行的下一行覆盖至模式空间
    sed 'n;p' passwd
    1,2,3,4行,当匹配到第一行时下一行为2,第二行覆盖第一行并打印
    2,第三行读取下一行覆盖第三行,打印第四行,
    N:读取匹配到的行的下一行追加至模式空间
    d: 删除模式空间中的行
    D:如果模式空间包含换行符,则删除直到第一个换行符的模式空间中的文本,并不会读取新的输入行,而使用合成的模式空间重新启动循环。如果模式空间不包含换行符,则会像发出d命令那样启动正常的新循环

  • 相关阅读:
    [视频监控]用状态机图展示Layout切换关系
    初次打开mysql5.6后
    eclipse 项目乱码
    java servlet 中遇到的编码问题
    解决HttpServletResponse输出的中文乱码问题
    The first day of my Blog
    最大子段和
    LOI 54 成立一周年纪(zuo)念(si)
    水题 逆序对 NOIP 2013 火柴排队
    搜索 由浅入深 之一 水题
  • 原文地址:https://www.cnblogs.com/alexlv/p/13329477.html
Copyright © 2011-2022 走看看