• SHELL中sed总结


    一.Sed定义

    sed命令是将一系列的编辑命令应用于一批文本的理想工具。sed命令拥有非交互式和高效的特点,可以为用户节约大量的时间。本节将介绍sed命令的基础知识。

    二.sed的基本语法

    sed  OPTIONS…  '[ 动作 ]' [ 文件名 ]
    常用的选项:
    -n,–quiet: 不输出模式空间中的内容
    -i: 直接编辑原文件,默认不对原文件进行操作
    -e: 可以使用多个命令(脚本)进行操作
    -f /path/from/sed_script: 以选项中指定的 script 文件来处理输入的文本文件。
    -r: 使用扩展正则表达式

    三.sed 地址定界

    (1) # :#为数字,指定要进行处理操作的行         sed -n '2 p' /etc/passwd

    (2)   $:表示最后一行.    sed -n '$ p' /etc/passwd

    (3)  /regexp/:表示能够被regexp匹配到的行 sed -n '/root/ p' /etc/passwd

           regexp及基于正则表达式的匹配

          /regexp/I:忽略大小写

    (4)  /regexp/:从起始行开始到第一次能够被regexp匹配到的行

    sed -n '1,/bin/ p'        /etc/passwd

    (5) first~step:指定起始的位置及步长

    sed -n '1~3 p' /etc/passwd

    从第一行开始每隔3行显示一行内容

    (6)

    addr1,+N:指定行以及以后的N

    addr1,~N:指定行开始的N

    四.sed常用编辑命令
     

    (1) d:删除匹配到的行

    sed 'd'   /etc/passwd        删除全部
    sed '3d'  /etc/passwd       删除第三行
    sed '2,5d' /etc/passwd      删除第二行到第五行
    sed '/1/,/3/d' /etc/passwd   删除一到三行
    sed '3,$d'   /etc/passwd     删除第三行到结束
    (2) p : 打印模式空间中的内容
             sed -n '1,3 p' /etc/passwd
    (3) a \text:  append,表示在匹配到的行之后追加内容
        sed '/root/ a this is root ' /etc/passwd
    (4)i \text: insert,表示在匹配到的行之前追加内容
       sed '3i this is root' /etc/passwd

    (5)c \text: change,表示把匹配到的行和给定的文本进行交换-----行替换
    sed '3c this is text' /etc/passwd
    (6)  s/regexp/text/flages :查找替换 , text 替换为 regexp 匹配到的内容
    常用的flages有:
    g :全局替换,默认只替换第一个
    i : 不区分大小写
    p :如果成功替换则打印
    例子:.对文本文件需要对里面的第十二行aaa字符串进行替换成bbb应该要怎么命令操作
    sed '12s/aaa/bbb/p ' /text
    (7)w 标记会将匹配后的结果保存到指定文件中
    sed '12s/aaa/bbb/w test.txt ' /text
    cat test.txt
    bbb

    五.sed扩展

    特殊符号 介绍说明

    ! 对指定行意外的所有行应用命令                   sed '3,$ ! d' /etc/passwd
    = 打印当前行行号                                            sed -n '=' a.sh
    & 代表被替换的内容
    ; 实现一行命令语句可以执行多条 sed 命令 1p;2p;5p
    {} 对单个地址或范围执行批量操作 { 将多个规则,或者多个命令放在大括号通过;隔开 }
    + 地址访问内用到的符号,做加法运算
    -e 可以指定多个表达式 [root@localhost ~]# sed -n -e '1 s/root/ROOT/p' -e '2,3 p'
    /etc/passwd
    -n ** 打印当前模式空间内容,然后读取下一行并替代当前模式空间的内容。如果读取不到下一行 sed 则会 不运行之后的命令 ** (读取指定行通过下一行覆盖该内容只对下一行进行处理)
    -N ** 读取下一行并且附加到当前模式空间内,如果读取不到下一行 sed 则会不运行之后的命令 ** (可以在
    模式空间同时读取两行内容进行处理)
    例题:
    1 、把 /etc/passwd 复制到 /root/test.txt ,用 sed 打印所有行;
    [root@172 ~] # sed '1,$ w /root/test.txt' /etc/passwd
    [root@172 ~] # sed -n -e 'p' -e'w ./t1.txt' /etc/passwd
    2 、打印 test.txt 3 10 ;
    [root@172 ~] # sed -n '3,10p' test.txt
    3 、打印 test.txt 中包含 ’root’ 的行;
    [root@172 ~] # sed -n '/root/p' test.txt
    4 、删除 test.txt 15 行以及以后所有行;
    [root@172 ~] # sed '15,$d' test.txt
    5 、删除 test.txt 中包含 ’bash’ 的行;
    [root@172 ~] # sed '/bash/d' test.txt
    6 、替换 test.txt ’root’ ’toor’
    [root@172 ~] # sed -n 's/root/toor/g p' test.txt
    7 、替换 test.txt ’/sbin/nologin’ ’/bin/login’
    sed 's/\/sbin\/nologin/\/bin\/login/g' test.txt
    8 、删除 test.txt 5 10 行中所有的数字;
    [root@172 ~] # sed -nr '5,10 s/[0-9]+//g p' test.txt
    [root@172 ~] # sed -nr '5,10 s/[0-9]*//g p' test.txt
    9 、删除 test.txt 中所有特殊字符(除了数字以及大小写字母);
    [root@172 ~] # sed -nr 's/[[:punct:]]//g p' test.txt
    10 、在 test.txt 20 行到末行最前面加 ’aaa:’
    [root@172 ~] # sed '20,$ i aaa:' test.txt
    11 、删除 centos7 系统 /etc/grub2.cfg 文件中所有以空白开头的行行首的空白字符
    [root@172 ~] # sed 's/^[ ]*//' /etc/grub2.cfg
    12 、删除 /etc/fstab 文件中所有以 '#' 开头,后面至少跟一个空白字符的行的行首的 '#' 和空白
    字符
    [root@172 ~] # sed -r 's/^#[ ]//' /etc/fstab
    13 、在 centos6 系统 /root/install.log 每一行行首增加 '#' [root@centos6 ~] # sed -n 's/^/#/p' install.log
    [root@centos6 ~] # sed -rn 's/(^.*)/#\1/p' install.log
    14 、在 /etc/fstab 文件中不以 '#' 开头的行的行首增加 '#'
    [root@172 ~] # sed 's/^[^#]/#/' /etc/grub2.cfg
    15 、处理 /etc/fstab 路径 , 使用 grep sed 命令取出其目录名和基名
    [root@centos7 data] #echo /etc/fstab | sed -nr 's#(.*)/.*$#\1#p' /etc
    [root@centos7 data] #echo /etc/fstab | sed -nr 's#.*/([^/]+)/?$#\1#p'
    fstab
    16 、利用 sed 取出 ifconfig 命令中本机的 IPv4 地址
    [root@172 ~] # ifconfig |sed -nr '/inet / s/.*et (.*) ne.*/\1/ p'
    17 、统计 centos 安装光盘中 Package 目录下的所有 rpm 文件的以 . 分隔倒数第二个字段的重复次
    [root@172 ~] # ls /mnt/BaseOS/Packages/ |sed -nr 's/.*el8\.(.*)\.rpm/\1/
    p'
  • 相关阅读:
    计算机专业突然不香了?会成为下一个土木工程吗?
    【数据结构】数组和字符串(三):特殊矩阵的压缩存储:三角矩阵、对称矩阵——一维数组
    接口测试3-接口依赖之token提取
    研发医疗器械产品需要做的测试
    VR虚拟仿真在旅游课堂教学演示
    WalleWeb简化你的DevOps部署流程
    自动化测试的优缺点
    C#WPF数字大屏项目实战02--主窗体布局
    电脑硬盘数据恢复哪个好?值得考虑的 8 个硬盘恢复软件解决方案
    【CV基石】Soft-NMS
  • 原文地址:https://blog.csdn.net/m0_59520765/article/details/127121215