• sed命令基础2


    我在sed命令基础里面说了一下sed的基础用法,sed还有一些高级用法,由于我也是在学习中,写的博客可能会有想不到的地方,有问题希望大家指出。

        sed的高级用法主要在于两个空间的使用,模式空间保持空间,模式空间就是我们对于进入其中的语句进行处理的空间,保持空间就像是一个临时的交换swap,我们可以将模式空间里面的东西放到保持空间中,或者将保持空间里面的东西取出追加到模式空间,通过一定的命令,将两个空间里面的东西进行处理,能解决很多文本处理问题。

    高级编辑命令

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

      x:把模式空间中的内容与保持空间中的内容进行互换

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

      H:把模式空间中的内容追加到保持空间中

      g:从保持空间取出数据覆盖至模式空间

      G:从保持空间取出数据追加至模式空间

      n:读取匹配到的行的下一行覆盖至模式空间

      N:读取匹配到的行的下一行追加到模式空间

      d:删除模式空间中的行

      D:删除模式空间中从开始到第一个

    一些示例

      sed -n 'n;p' FILE 显示偶数行

      sed '1!G;h;$!d' FILE 倒序显示

      sed -n '1!G;h;$p' FILE 倒序显示

      sed 'N;D' FILE 显示最后一行

      sed '$!N;$!D' FILE显示最后两行

      sed '$!d' FILE 显示最后一行

      sed 'G' FILE 给每一行后面加一空行

      sed 'g' FILE 所有行替换成空行

      sed '/^$/d;G' FILE 保证让每一行非空行后面都有一个空行

      sed 'n;d' FILE 显示奇数行 

    相关的练习(基础部分的多)

     1、删除centos7系统/etc/grub2.cfg文件中所有以空白开头的行行首的空白字符   

    cat grub2.cfg |sed -r 's/^[[:space:]]+//'

     2、删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符 

     sed -r "/^#[[:space:]]/s/^#[[:space:]]+([^[:space:]])/1/" fstab 
    sed -r 's/^#[[:space:]]+//' fstab

     3、在centos6系统/root/install.log每一行行首增加#号 

    sed 's/^/#/g' /root/install.log

     4、在/etc/fstab文件中不以#开头的行的行首增加#号

    cat /etc/fstab |sed 's/^[^#]/#&/'

     5、处理/etc/fstab路径,使用sed命令取出其目录名和基名

     echo /etc/sysconfig/network-scripts/ |sed -r 's#(^/.*/)([^/].*/?$)#a:1
    b:2#'

     6、利用sed 取出ifconfig命令中本机的IPv4地址

     ifconfig eth0 |sed -n '2p' |sed 's#^.*addr:##g' |sed 's# Bcas.*$##g'
     ifconfig eth0 |sed -n -e '2s#^.*addr:##g' -e 's# Bcas.*$##gp'

     7、统计centos安装光盘中Package目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数

     ls /mnt/cdrom/Packages/ | sed -r -e "s/(.*.)([^.].*$)/1/" -e "s/(.*.)([^.].*.)/2/" | sort | uniq -c | sort -n

     8、统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

    cat /etc/init.d/functions | sed -r "s/[^[:alpha:]]/
    /g" | sort | uniq -c | sort -n 
    cat /etc/init.d/functions | egrep -o "[[:alpha:]]+" | sort | uniq -c | sort -n

     9、将文本文件的n和n+1行合并为一行,n为奇数行

    seq 10 | sed "1~2N;s/
    / /"
  • 相关阅读:
    [MyBatis]最简MyBatis工程
    eclipse中如何删除已经添加到 Web App Libraries 中引用的jar包
    day48_项目管理学习笔记
    项目流程之失败的案例
    项目流程之婚礼流程
    day47_Maven学习笔记
    快还要更快,让PHP 7 运行更加神速
    Linux服务器时间同步
    Win10系统开启Linux Bash命令行
    红帽RHOP 8 发布一条龙方案
  • 原文地址:https://www.cnblogs.com/duzhaoqi/p/7445735.html
Copyright © 2020-2023  润新知