关于文本处理工具之SED

处理文本的工具sed

行编辑器:
         sed 是一种流编辑器,它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,我们称为“模式空间”
        接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕、接着处理以下一行,这样不断重复,直到文件末尾。
        文件内容并没有改变,除非你使用重定向存储输出。sed主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序等

还有一种模式叫做保持空间:sed工作机制是每次读取一行文本至‘模式空间’中,在模式空间中完成处理,将处理结果输出至标准输出设备,在模式空间中处理一行内容后会继续处理下一行,那么对于处理过的行可能还会做其它的处理,因此可以先把处理过的行‘导入’至保持空间中,如果需要后续处理的话,就在次‘导入’模式空间中处理,概念:模式空间就好比厨房,保持空间好比冰箱,厨房用作加工生产,冰箱负责,保存一些半成品材料。

保持空间支持一些高级的命令来运用到保持空间当中 :具体看最下面:高级编辑命令选项

sed用法
sed [选项] 可以跟多个选项 ‘script‘  [源文件]  可以跟多个文本
script: 地址定界编辑命令 ,指明对文本做什么样的操作
  常用选项:
       sed -n    不输出模式空间中的内容自动打印   
             例如 ~]# sed -n ‘2p‘ /etc/passwd    加了-n选项只显示出来定义的内容 p显示模式空间中的内容
                
       sed -e    scropt1 -e scropt2 -e scropt2 可以进行多点编辑                           
       sed -f    /path/to/script_file      从指定的文件中读取脚本并运行   
       sed -r    支持使用扩展正则表达式
      
       sed -i    直接对源文件进行修改      
                 例如  选项i sed -i.bak ‘10d‘ f1 对源文件操作的时候 做好备份文件
                
  地址定界:抽取的区域
  在不给地址的情况下,对全文进行处理
  给单地址: 
       #         表示数字,指定的行
                 例如  ~]# sed -n ‘1p‘ f1      只显示文本中的第1行
              
       $         最后一行
                 例如  ~]# sed -n ‘$p‘ f1      只显示文本中的最后的行
         
       /模式/    被此处模式所能够匹配到的每一行;可以是正则表达式 
                 例如 ~]# sed -n ‘/root/p‘ /etc/passwd  只匹配带有关键字的搜索内容
 
  地址范围:
      #1,#2     从#1行到#2行                
                例如 ~]# sed -n ‘1,4p‘ /etc/passwd     只显示文本中第1行到第4行的内容
               
      #,+n     从#行开始,一直到向下的n行 
                例如 ~]# sed -n ‘4,8p‘ f1        只显示文本中第4行开始到文本中第8行的内容
               
      #,/模式/  从#行开始,到第一次被模式所匹配到的行结束,中间的所有行内容    
                例如 ~]# sed -n ‘2,/root/p‘ /etc/passwd
               
      /模式1/,/模式2/  从第一次呗模式1匹配到的行开始,

到第一次被模式2匹配到的行结束,中间所有行内容 
  
      ~         步进,指定起始行,以及步长。 1~2 计数行 2-2 偶数行    
                 例如 ~]# sed -n ‘1~2p‘ file1   至显示1的奇数行,1,3,5.....
                 例如 ~]# sed -n ‘2~2p‘ file1   只显示2的偶数行,2,4,6.....     
     
  编辑命令:
     d :        删除模式空间匹配的行          
                例如  ~]# sed ‘4d‘ f1   删除第4行的匹配的行, 不是删除源文件内容,输出删除而已
          
     p :        显示模式空间中的内容          
                例如  ~]# sed -n ‘4p‘ f1    配合-n选项不输出文本内容为自动打印,p仅显示第4行匹配到的内容
          
     a \text :  在行后面追加文本,支持使用\n换行字符实现多行追加   
                例如  ~]# sed ‘/^1/a\xiaomage‘ file1   我在开头为数字1的行,追加内容到1之后的行后面
          
     i \text :  在行前面插入文本,支持使用\n换行字符实现多行插入 
                例如 ~]# sed ‘/^1/i\xiaomage‘ file1   同样,使用i 在开头数字为1的行,追加内容到1之前的行前面
          
     c \text :  替换行为单行或多行文本
                例如  ~]# sed ‘/^1/c\xiaomage‘ file1   将字符为1的行,替换成xiaomage内容
          
     w /path/to/somefile   保存模式匹配的行至指定的文件
                例如   ~]# sed ‘/^1/w /root/f1 ‘ file1   将字符开头为1的 保存指定的路径下,并命名
          
     r /path/from/somefile  读取指定文件的文本至模式空间中匹配到的行后

=          为模式空间中的行打印行号
     !         模式空间中匹配行取反处理
     s/正则表达式/替换的位置/
               s/// 查找替换,支持使用其他分隔符[email protected]@@,s####
                替换标记
                    g   行内全局替换
                    p   显示替换成功的行
                    w   w /path/to/somefile   将替换成功的行保存至指定的文件
         
  高级编辑命令:
     h      把模式空间中的内容覆盖至保持空间中
     H      把模式空间中的内容追加至保持空间中
     g      从保持空间取出数据覆盖至模式空间
     G      从保持空间取出内容追加至模式空间
     x      把模式空间中的内容与保持空间中的内容进行互换
     n      读取匹配到的行的下一行覆盖至模式空间
     N      追加匹配到的行的下一行至模式空间
     d      删除模式空间中的行
     D      删除多行模式空间中的行首
            注:命令功能可使用!取反, ;分好可用于分隔脚本

练习 1
1 删除/etc/grub2.conf 文件中所有以空白开头的行行首的空白字符
  ~]# sed -r ‘[email protected]^[[:space:]][email protected]@‘ /etc/grub2.cfg
(命令选项,-r使用扩展表达式,查找替换,分隔符,开头为空白的行 +匹配最少一次,后面跟路径)

2 删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符
~]# sed ‘[email protected]^#[[:space:]]\[email protected]@‘ /etc/fstab
 (命令选项, -r 使用扩展表达式,查找替换分隔符,^开头为#空白符的 匹配前面的字符至少一次)
 
3 在/root/install.log 每一行行首增加#号
~] # sed -r ‘[email protected](.*)@#\[email protected]‘ /root/install.log
(命令选项,-r使用扩展表达式,s查找替换分隔符以分组.*任意字符\1#g替换分组内匹配到的字符)
~] # sed ‘[email protected]^@#@‘ /root/install.log
 (命令选项,s查找替换以^开头为#的字符,后面跟路径)
 
4 在/etc/fstab 文件中不以#开头的行的行首增加#号
~] # sed  ‘[email protected]^[^#]@#&@‘ /etc/fstab 
(命令选项,s查找替换开头^[^不以#]中增加#号, 后面跟路径)

5 处理/etc/fstab路径,使用sed 命令取出其目录名和基名
~] #echo /etc/sysconfig/ |sed -r  ‘s#[^/]+/?$##‘ 目录名
~] #echo "/etc/fst/sd" | sed   -r ‘[email protected](.*/)([^/]+/?)[email protected]\[email protected]‘

6 利用sed 取出ifconfig 命令中本机的ipv4地址
~] #ifconfig|sed -n 2p |sed -e  ‘s/.*addr://‘ -e ‘s/ B.*//‘

7 统计 centos 安装光盘中package 目录下的所有rpm文件的以.分隔倒数第二个字段的重复次数
~]# ls *.rpm |rev |cut -d. -f2 |rev|sort |uniq -c

时间: 2024-10-07 12:00:25

关于文本处理工具之SED的相关文章

Linux系统上的文本处理工具之sed

sed命令 sed是一种在线编辑器.行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,该缓冲区称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完毕后,把缓冲区的内容送到标准输出:然后紧接着去处理下一行,重复完成相同的操作,直至文件结尾:sed处理的整个过程中,对象文件中的内容并没有改变,除非使用重定向来存储处理后的结果.sed主要用来自动编辑一个或多个文件,简化对文件的反复操作过程. sed跟我们之前讲过的文本处理工具vi

文本处理工具之SED流编辑器

文本处理三剑客之SED(流编辑器) sed的工作方式:在指定文件中,按行读取内容至模式空间,然后根据sed的scripts编辑改行内容,编辑完毕后输出至屏幕,再读取下一行进行处理.如果有该行内容未被处理完毕就有新的内容要进行编辑,则把该行内容移至保持空间中,,保持空间中的内容可以随时调回模式空间中. sed的使用 使用格式:sed [options...] 'scipts' file 常用选项: -n:不输出模式空间中的内容至标准输出(不自动打印) -e script:多点编辑sed -e '[

文本处理工具之sed

sed 行编辑器 sed是一种流编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.然后读入下行,执行下一个循环. 如果没有使诸如'D' 的特殊命令,那会在两个循环之间清空模式空间,但不会清空保留空间.这样不断重复,直到文件末尾.文件内容并没有改变,除非你使用重 定向存储输出. 功能 主要用来自动编辑一个或多个文件,简化对文件的反复操作,编写转换程序

Linux文本处理工具之sed

概念: sed是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓存区中,称为"模式空间(pattern space)",接着用舍得命令处理缓冲区中的内容,处理完成后,把缓存区的内容输出.接着处理下一行,这样不断重复,直到文件末尾.文件内容并没有改变,除非你是用重定向存储输出.sed主要用来编辑一个活多个文件. 格式: sed [-nefri] 'command' 输入文本 常用选项: -n:使用安静(silent)模式.在一般sed的用法中,所有来自STDIN的资

文本处理工具之---sed

sed,Stream editor的缩写,功能很强大,可以进行文本替换删除打印等,与grep.awk不同的是,它侧重点在于整行的编辑: 它的工作过程是,首先将文件分成以行为单位,然后将每一行逐次的放入缓冲区(模式空间),sed将其处理完毕后发送到标准输出,处理完最后一行sed便运行结束.由于sed是对存储在缓冲区的文件进行辑,因此,sed不会修改或者损坏正在编辑的文件. sed的用法: sed [OPTION]... 'script' [input-file]... sed的选项参数比较少,主要

处理文本的工具sed,vim 编辑器的使用   Linux版

处理文本的工具sed Stream EDitor 行编辑器 sed一次处理一行的内容,处理时,将当前处理的行存储在临时缓冲区,称为"模式空间",接着用sed命令处理缓冲区中的内容,处理完成后,将缓冲区的内容送往屏幕,接着处理下一行不断重复,直到末尾. 一次处理一行 文件--->内存空间--->屏幕 模式空间 文件--->内存空间--->屏幕 | 保持空间 sed   -n:不输出模式空间内容的自动打印 -e:多点编辑 -f:/PATH/TO/SCRIPT_FIL

DAY8:文本处理工具sed和vim

8月8号,主要学习内容为: 一.文本处理工具sed 二.vim编辑器 一.文本处理工具sed 1)简介 sed是一种流编辑器,它一次处理一行内容.处理时,把 当前处理的行存储在临时缓冲区中,称为"模式空间"( pattern space),接着用sed命令处理缓冲区中的内容 ,处理完成后,把缓冲区的内容送往屏幕.接着处理下一 行,这样不断重复,直到文件末尾.文件内容并没有改变 ,除非你使用重定向存储输出.Sed主要用来自动编辑一 个或多个文件,简化对文件的反复操作,编写转换程序等. 用

文本处理工具grep和sed的用法

正则表达式:Regual Expression ReGEXP 基本正则表达式:BRE 扩展正则表达式:ERE 作用:文本搜索工具,根据用户指定的"模式(PATTERN)"对目标文本进行逐行匹配检查,并打印匹配到的行. 模式(PATTERN):由正则表达式的元自负及文本字符所编写出的过滤条件. grep[OPTIONS]PATERN[FILE] grep[OPTIONS][-e PATTERN][FILE] [OPTIONS]: --color=auto:对匹配到的文本着色高亮显示(Ce

shell之三大文本处理工具grep、sed及awk

grep.sed和awk都是文本处理工具,虽然都是文本处理工具单却都有各自的优缺点,一种文本处理命令是不能被另一个完全替换的,否则也不会出现三个文本处理命令了.只不过,相比较而言,sed和awk功能更强大而已,且已独立成一种语言来介绍. grep:文本过滤器,如果仅仅是过滤文本,可使用grep,其效率要比其他的高很多: sed:Stream EDitor,流编辑器,默认只处理模式空间,不处理原数据,如果你处理的数据是针对行进行处理的,可以使用sed: awk:报告生成器,格式化以后显示.如果对处