• 技术文章 >运维 >linux运维

    一文读懂shell编程三剑客之一的sed命令

    齐天大圣齐天大圣2020-09-18 09:30:55原创694
    作为shell编程三剑客之一的sed,重要程度不言而喻。sed是一个流编程器,每次处理一行,处理完后再接着处理下一行,它支持正则,功能非常的强大。但sed比一般的命令复杂一些,选项繁多,想要掌握它是需要花点功夫的。下面我们通过众多的例子来看看这个强大的sed命令的作用吧!

    语法格式:sed [选项] [动作]

    常用选项如下:

    动作中的参数及太多了,下面列一下:

    范例一:打印/etc/passwd文件的第5-10行

    # sed -n '5,10p' /etc/passwd
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin

    范例二:删除/etc/passwd文件的第2行,第2到10行

    # cat -n /etc/passwd | sed '2d' | sed '5,10d'

    除了上面的方法,我们还可以用-e选项来完成

    # cat -n /etc/passwd | sed -e '2d' -e '5,10d'

    范例三:获取服务器ip地址

    这个案例非常的棒,建议大家仔细看看

    # ifconfig eth0
    eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
            inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255
            ether 00:16:3e:0a:01:ad  txqueuelen 1000  (Ethernet)
    ……

    我们需要的是172.26.9.143。

    第一步,获取我们想要处理的行

    # ifconfig eth0 | sed -n '/.*inet/p'
            inet 172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

    第二步,将不需要的信息给替换位空白字符

    # ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g'
    172.26.9.143  netmask 255.255.240.0  broadcast 172.26.15.255

    接下来把ip地址后面的全部替换位空就行了

    # ifconfig eth0 | sed -n '/.*inet/p' | sed 's/.*inet\s\+//g' | sed 's/\s\+.*//g'
    172.26.9.143

    下面我们来说说上面的例子,首先第一步我们使用了-n和p来获取我们想要的行。然后,我们将不需要的信息进行过滤,需要注意的时,正则中\s+表示至少匹配一个空格,但在这里需要在加号前使用转义字符\。

    范例四

    最后一个范例,我给出我昨天一个真实案例。需求是这样的,获取一段文本中的url地址,但不需要前面的http://。部分文本内容如下:

      <td width=820>&nbsp;<a href=http://beijing.hellozx.com onclick="co('beijing')"><font color="red">北京</font></a>
        &nbsp;<a href=http://shanghai.hellozx.com onclick="co('shanghai')"><font color="red">上海</font></a>
        &nbsp;<a href=http://tianjin.hellozx.com onclick="co('tianjin')"><font color="red">天津</font></a>
        &nbsp;<a href=http://chongqing.hellozx.com onclick="co('chongqing')"><font color="red">重庆</font></a></td></tr>
    <tr><td width=80 height=30 align=right>
    <b><font style="font-size:14px;">山东</font>:</b>&nbsp;</td><td width=820>
    &nbsp;<a href="http://jinan.hellozx.com" onclick="co('jinan')"><font color=red style="font-size:14px;">济南</font></a>
    &nbsp;<a href="http://qingdao.hellozx.com" onclick="co('qingdao')"><font color=red style="font-size:14px;">青岛</font></a>

    下面我们分几步去完成该需求,首先,将不含url地址的行全部过滤

    # sed -n '/http:/p' a.txt

    然后,将不需要的信息全部替换位空白字符即可。先把http://及之前字符全部删除

    sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g'

    ,接着把双引号及之后字符全部删除

    # sed -n '/http:/p' a.txt | sed 's/.*http:\/\///g' | sed 's/".*//g'

    现在屏幕输出的内容如下

    haikou.hellozx.com sanya.hellozx.com kunming.hellozx.com dali.hellozx.com xining.hellozx.com yinchuan.hellozx.com wulumuqi.hellozx.com ……

    以上就是一文读懂shell编程三剑客之一的sed命令的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:shell
    上一篇:通过几个案例讲解linux下的awk命令 下一篇:全面整理linux下shell中各种括号的作用及用法
    大前端线上培训班

    相关文章推荐

    • phpcms怎么拿shell• 记录thinkphp5.0和5.1的getshell漏洞• 详解php命令行写shell实例• 一起看看PHP执行普通shell命令流程

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网