• 38.sed高级编辑命令


    1.        简介:

    模式空间和保持空间:

    (1)模式空间:模式空间用于sed执行的正常流程中。该空间是sed内置的一个缓冲区,用来存放,修改从输入文件读取的内容。

    (2)保持空间:保持空间是另外的一个缓冲区,用来存放临时的数据。sed可以在保持空间和模式空间交换数据,但是不能在保持空间上执行普通的sed命令。每次循环读取数据过程中,模式空间的内容都会被清空,然而保持空间的内容则保持不变,不会在循环中被删除。

    2.        高级编辑命令:

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

    H        把模式空间中的内容追加至保持空间中;

    g        把保持空间中的内容覆盖至模式空间中;

    G        把保持空间中的内容追加至模式空间中;

    x        把模式空间中的内容与保持空间中的内容互换;

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

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

    d        删除模式空间中的行;

    D        删除多行模式空间的所有行;

    3.        示例:

    (1)sed  -n  'n;p'  文件名        #显示偶数行

    1. [root@work ~]# cat -n sed.txt
    2. 1 One
    3. 2 Two
    4. 3 Three
    5. 4 Four
    6. 5 Five
    7. 6 Six
    8. [root@work ~]# sed -n 'n;p' sed.txt
    9. Two
    10. Four
    11. Six

    (2)sed  'n;d'  文件名        #显示奇数行

    1. [root@work ~]# sed 'n;d' sed.txt
    2. One
    3. Three
    4. Five

    (3)sed  '1!G;h;$!d'  文件名        #逆序显示文件的内容

    注意:1!G:        #第1行不执行“G”命令,从第二行开始执行。       

                $!d:        #最后一行不删除(保留最后一行)

    1. [root@work ~]# sed '1!G;h;$!d' sed.txt
    2. Six
    3. Five
    4. Four
    5. Three
    6. Two
    7. One
    1. 也可使用tac命令:
    2. [root@work ~]# tac sed.txt
    3. Six
    4. Five
    5. Four
    6. Three
    7. Two
    8. One

    (4)sed  '$!d'  文件名        #取出最后一行

    1. [root@work ~]# sed '$!d' sed.txt
    2. Six

    (5)sed  '$!N;$!D'  文件名        #取出文件后两行

    1. [root@work ~]# sed '$!N;$!D' sed.txt
    2. Five
    3. Six

    (6)sed  '/^$/d;G'  文件名      #删除原有的所有空白行,而后为所有的非空白行后添加一个空白行

    1. [root@work ~]# cat sed.txt
    2. One
    3. Two
    4. Three
    5. Four
    6. Five
    7. Six
    8. [root@work ~]# sed '/^$/d;G' sed.txt
    9. One
    10. Two
    11. Three
    12. Four
    13. Five
    14. Six

    (7)sed  'G'  文件名        #在原有的每行后方添加一个空白行

    1. [root@work ~]# cat sed.txt
    2. One
    3. Two
    4. Three
    5. Four
    6. Five
    7. Six
    8. [root@work ~]# sed 'G' sed.txt
    9. One
    10. Two
    11. Three
    12. Four
    13. Five
    14. Six

    4.        练习题:

    (1)使用sed命令打印出ifconfig ens33的IP地址:

    (2)使用sed命令打印系统版本:

    (3)使用sed命令将 /etc/httpd/conf/httpd.conf 中 #NameVirtualHost *:80 去掉 # 号,同时将最后7行的#都去掉:

    (4)复制 /boot/grub2/grub.cfg 文件至 /tmp目录中,删除 /tmp/grub.cfg 文件中的行首的空白字符:

    (5)为 /tmp/grub.cfg 文件中前三行的行首添加#号:

    (6)将 /etc/yum.repos.d/ CentOS-Media.repo 文件中所有的enabled=0或gpgcheck=0的最后的0修改为1:

    (7)显示/etc/passwd文件中位于第偶数位置的用户的用户名:

  • 相关阅读:
    解析/区分MOS管的三个引脚G、S、D(NMOS管和PMOS管)
    Allegro怎样标识尺寸?
    【Java实战】工作中如何规范定义Java常量
    Facebook聊单,SaleSmartly有妙招!
    XDOJ-360 结点在二叉排序树的位置
    前端文件下载方法总结
    minio元数据实现单独存储
    shell 初探
    Python3高级特性(二)之迭代(Iterable)
    uniapp 自定义导航栏
  • 原文地址:https://blog.csdn.net/Pink_Home/article/details/127339873