2017-11-02

sed:行编辑器,按行处理;默认不做原文件修改,会在sed自身的模式空间中按行读相关的数据并完成编辑,然后显示到屏幕上

 
 

一.     基本用法:

1. 语法格式:

sed [option]... 'script'  文件名,其中script = '编辑位置+编辑命令'    注意:编辑位置要紧跟着编辑命令,中间没空格

 
                
 2.  option选项:(sed后面跟的参数,比如sed -n...)
                -n:默认输出文件全部内容,加上-n就不会输出,可用于控制输出,一般和编辑命令p一起用,比如sed -n '3,5p'  1.txt    输出1.txt的3-5行;
                -e: 多点编辑,用于一条命令中执行多个编辑操作;
                -f /PATH/TO/SCRIPT_FILE: 从指定文件中读取编辑脚本;
                -r: 支持使用扩展正则表达式;
                -i: 直接修改文件内容;
 

3.     编辑位置选定:
                (1) 不给位置:对全文进行处理;
                (2) 单位置:
                    #: 指定的行,比如5表示第5行
                    /pattern/:被此处模式所能够匹配到的每一行;
                (3) 位置范围:
                     

(4) 正则表达式匹配

 4.    编辑命令:
                d:删除,例如删除空白行sed '/^$/d' file;删除文件最后一行sed '$d' file
                p:显示模式空间中的内容
                a \text:在指定行的下一行追加文本,text表示要加入的文本信息;支持使用\n实现多行追加;
                             其中a和\之间有没空格都可以,经验证不要\也行,下面的同理
                             比如:sed '/^UUID/a \hello,world. \nwelcome' /etc/fstab---在以UUID开头的行后面追加hello,world和 welcome两行信息                                       
                i \text:在行前面插入文本;支持使用\n实现多行插入;
                c \text:替换行为单行或多行文本为指定的信息,比如sed '/^UUID/c \hello,world. \nwelcome' /etc/fstab;
                w:保存模式空间匹配到的行至指定文件中;
                      比如sed '/^UUID/w /tmp/fstab.txt' /etc/fstab, 把etc/fstab以UUID开头的行,存到/tmp/fstab.txt中               
                r:读取指定文件的文本流至模式空间中匹配到的行的行后;
                     例如:sed '6r /etc/issue' /etc/fstab----把/etc/issue中的内容写到/etc/fstab文件的第6行后面                   
                =:为模式空间中的行打印行号; sed '/^UUID/=' /etc/fstab 打印匹配到以UUID开头的行号
                !:取反条件; 例如 sed '/^UUID/!d' /etc/fstab   ---删除不是以UUID开头的行
                s///:支持使用其它分隔符,s@@@,s###;--查找替换; 例如:sed 's#^UUID#uuid#' /etc/fstab
 
 
                    替换标记:
                        1)g: 行内全局替换,比如sed 's/girl/girls/g' file ;会替换每一行的所有匹配
 
                        2) 当需要从第N处匹配开始替换时,可以使用 /Ng
                              echo sksksk | sed 's/sk/SK/2g'
                              skSKSK
                        3)如只想替换第N处匹配,需要用/N
                              <body>hello the world! <body>中,把第2个body替换为</body>,所在的文件为test.txt
                             sed -r 's#(body)#/&#2' test.txt                       
 
                        4)p: 显示替换成功的行;
 
                        5)w /PATH/TO/SOMEFILE:将替换成功的结果保存至指定文件中;
         
       例子:          
 
            1)删除/boot/grub/grub.conf文件中所有以空白开头的行行首的空白字符;(centos7)
                    sed 's#^[[:space:]]\+##' /etc/grub2.cfg
 
            2)删除/etc/fstab文件中所有以#开头,后面至少跟一个空白字符的行的行首的#和空白字符;
                    sed 's@^#[[:space:]]\+@@' /etc/fstab           
                   
            3)在/etc/profile的最后一行附加两行文本name=hong;intro=hello,$name,如果不想使变量生效,用单引号,想立刻生效用双引号。
                    sed -i '$a\name=hong \nintro=hello,$name' /etc/profile
   
 
              
5.   sed元字符集
 
       ^              匹配行开始,如:/^sed/匹配所有以sed开头的行。
       $              匹配行结束,如:/sed$/匹配所有以sed结尾的行。
       .               匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
       *               匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
       []             匹配一个指定范围内的字符,如/[Ss]ed/匹配sed和Sed。
       [^]           匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
       \(..\)         匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
       &               保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
       \<             匹配单词的开始,如:/\<love/匹配包含love开头的单词的行
       \>             匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
       x\{m\}     重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
       x\{m,\}    重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
       x\{m,n\}  重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。
 
 
      说明
  •     \(..\)的例子,匹配某一段字符串,这里的\其实是转义字符,默认sed不支持扩展正则表达式,如果用sed -r的话,转义字符可省去
 
                    1) echo this is digit 7 in a number | sed 's#digit \([0-9]\)#\1#'      
                          输出: this is 7 in a number
   
                          命令中 digit 7,被替换成了 7。样式匹配到的子串是 7,\(..\) 用于匹配子串,对于匹配到的第一个子串就标记为 \1,依此类推匹配到的第二个结果就是 \2,例如:
                   
                    2) echo aaa BBB | sed 's/\([a-z]\+\) \([A-Z]\+\)/\2 \1/'
                           输出:BBB aaa
 
                    3) love被标记为1,所有loveable会被替换成lovers,并打印出来:sed -n 's/\(love\)able/\1rs/p' file

  •     关于&的例子
 
                    1)正则表达式 \w\+ 匹配每一个单词,使用 [&] 替换它,& 对应于之前所匹配到的单词:
                         echo this is a test line | sed 's/\w\+/[&]/g'
                         输出:[this] [is] [a] [test] [line]
 
                    2)所有以192.168.0.1开头的行都会被替换成它自已加localhost:
                          sed 's/^192.168.0.1/&localhost/' file
                          输出:192.168.0.1localhost
 
 
6.     高级编辑命令:
                    h: 把模式空间中的内容覆盖至保持空间中;(在模式空间中编辑,保持空间保存未编辑好的半成品数据,以便后面再处理)
                    H:把模式空间中的内容追加至保持空间中;
                    g: 从保持空间取出数据覆盖至模式空间;
                    G:从保持空间取出内容追加至模式空间;
                    x: 把模式空间中的内容与保持空间中的内容进行互换;
                    n: 读取匹配到的行的下一行至模式空间;(模式空间中只有匹配行的下一行,覆盖了匹配到的行)
                    N:追加匹配到的行的下一行至模式空间;(有2行)
                    d: 删除模式空间中的单行;
                    D:删除模式空间中的所有行;
 
                    几个例子:
                    sed -n 'n;p' FILE:显示偶数行   ---多个处理命令用分号隔开
                    sed '1!G;h;$!d' FILE:逆向显示文件内容-----
                    理解:1!表示第一行除外,$表示最后一行,!$表示除了最后一行,每一行都要执行这3个命令,然后才处理下一行,sed会首先读取一行到模式空间,然后执行这3个命令
                    sed '$!N;$!D' FILE: 取出文件后两行;
                    sed '$!d' FILE:取出文件最后一行;
                    sed 'G' FILE: 每一行后面追加一个空白行
                    sed '/^$/d;G' FILE: 如果是空白行,删掉,在后面再加一个空白行;表示把多个空白行合并为1个
                    sed 'n;d' FILE: 显示奇数行;
                    sed -n '1!G;h;$p' FILE: 逆向显示文件中的每一行;
                    sed '/test/{ n; s/aa/bb/; }' file  如果test被匹配,则移动到匹配行的下一行,替换这一行的aa,变为bb,并打印该行,然后继续:
                    sed '1,10y/abcde/ABCDE/' file   把1~10行内所有abcde转变为大写,y表示翻译,注意,正则表达式元字符不能使用这个命令:

sed--行编辑器命令的更多相关文章

  1. Linux下的sed流编辑器命令详解

    sed是stream editor的简称,也就是流编辑器.它一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区中,称为“模式空间”(pattern space),接着用sed命令处理缓冲区中的内 ...

  2. grep,awk和sed的常用命令和语法

    Grep的常用命令语法 1. 双引号引用和单引号引用在g r e p命令中输入字符串参数时,最好将其用双引号括起来.例如:“m y s t r i n g”.这样做有两个原因,一是以防被误解为 s h ...

  3. Shell:sed流编辑器

    转载:http://blog.sina.com.cn/s/blog_ac9fdc0b0101lvdv.html sed和awk是永远地痛,学了又忘,主要是木有横向对比过,所以总把握不到精髓.它可以完美 ...

  4. 文本处理三剑客之 Sed ——一般编辑命令

    sed简介 sed (stream editor for filtering and transforming text) 是Linux上的文本处理三剑客之一,另外两个是grep和awk. sed又称 ...

  5. Liunx查看后1000行的命令以及查看中间部分

    linux 如何显示一个文件的某几行(中间几行) [一]从第3000行开始,显示1000行.即显示3000~3999行 cat filename | tail -n +3000 | head -n 1 ...

  6. Linux三剑客之sed流编辑器

    一.功能说明 Sed是Stream Editor(流编辑器)缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行. 二.语法格式 Usage: sed [options] [se ...

  7. sed 流编辑命令

    1.命令功能 sed非交互式的流编辑器,sed不会修改源文件内容,除非重定向来保存输出结果:默认情况下所有的输出行都将被打印到屏幕上. 2.语法格式 sed  [option]  {script-on ...

  8. vi编辑器命令

    Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能.v ...

  9. vi 编辑器命令 (share)

    转自:http://man.ddvip.com/soft/vieditor/vi.html 一.Unix编辑器概述 编辑器是使用计算机的重要工具之一,在各种操作系统中,编辑器都是必不可少的部件.Uni ...

随机推荐

  1. 【LA2957 训练指南】运送超级计算机【二分,最大流】

    题意: 宇宙中有n个星球,你的任务是用最短的时间把k个超级计算机从星球S运送到星球T.每个超级计算机需要一整艘飞船来运输.行星之间有m条双向隧道,每条隧道需要一整天的时间来通过,且不能有两艘飞船同时使 ...

  2. 刷题向》一道简单的思路题BZOJ1800(EASY+)

    这道题其实并不难,主要原因是数据范围很小,当然数据如果大来也可以优化,但重点是在做的时候用的思路很通用, 所以本题是一道思想题(当然思想也不难) 标题里的“+”体现在一些边界处理中. 直接甩题目 De ...

  3. spring4-5-事务管理

    1.简单介绍 事务管理是企业级应用程序开发中必不可少的技术,  用来确保数据的完整性和一致性. 事务就是一系列的动作, 它们被当做一个单独的工作单元. 这些动作要么全部完成, 要么全部不起作用 事务的 ...

  4. Sqlserver2008 FileStream解决图片存储问题

    SQLserver FileStream的出现就是为了解决对大对象的存储中一个矛盾. 对于图片的存储方式 第一种:方式是存储在数据库里面,这种方式一般使用image字段,或者varbinary(max ...

  5. Tomcat内存溢出及大小调整

    一.在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat.jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常.这主要是由于应 ...

  6. 往数据库添加的时候(只添加以前未添加的记录的写法)c#

    using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threa ...

  7. mosquitto ---配置SSL/TLS linux

    mosquitto ---配置SSL/TLS 摘自: https://www.cnblogs.com/saryli/p/9821343.html 在服务器电脑上面创建myCA文件夹, 如在/home/ ...

  8. 如何优雅地使用命令行设置windows文件关联

    如何优雅地使用命令行设置windows文件关联 使用ftype查看帮助 设置关联所需命令有ftype assoc,需要管理员权限.如果忘记使用方法可通过ftype的帮助获取查看方法 C:\WINDOW ...

  9. 利用crosstool-ng自动化编译交叉编译环境(转)

    原文地址:http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi/ A ...

  10. 用Docker搭建WordPress

    环境准备 CentOS 安装docker https://yeasy.gitbooks.io/docker_practice/content/install/centos.html docker-co ...