shell脚本 sed工具练习

1. Sed简介  

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

2. 定址  

        可以通过定址来定位你所希望编辑的行,该地址用数字构成,用逗号分隔的两个行数表示以这两行为起止的行的范围(包括行数表示的那两行)。如1,3表示1,2,3行,美元符号($)表示最后一行。范围可以通过数据,正则表达式或者二者结合的方式确定 。  

  

3. Sed命令  

        调用sed命令有两种形式:  

        *  

        sed [options] ‘command‘ file(s) {   conmand为    /PATTERN/ACTION  }

        *  

        sed [options] -f scriptfile file(s)  

        a\  

        在当前行后面加入一行文本。  

        b lable  

        分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾。  

        c\  

        用新的文本改变本行的文本。  

        d  

        从模板块(Pattern space)位置删除行。  

        D  

        删除模板块的第一行。  

        i\  

        在当前行上面插入文本。  

        h  

        拷贝模板块的内容到内存中的缓冲区。 (模式空间 到 保持空间) 

        H  

        追加模板块的内容到内存中的缓冲区  

        g  

        获得内存缓冲区的内容,并替代当前模板块中的文本。  

        G  

        获得内存缓冲区的内容,并追加到当前模板块文本的后面。  

        l  

        列表不能打印字符的清单。  

        n  

        读取下一个输入行,用下一个命令处理新的行而不是用第一个命令。  

        N  

        追加下一个输入行到模板块后面并在二者间嵌入一个新行,改变当前行号码。  

        p  

        打印模板块的行。  

        P(大写)  

        打印模板块的第一行。  

        q  

        退出Sed。  

        r file  

        从file中读行。  

        t label  

        if分支,从最后一行开始,条件一旦满足或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。  

        T label  

        错误分支,从最后一行开始,一旦发生错误或者T,t命令,将导致分支到带有标号的命令处,或者到脚本的末尾。  

        w file  

        写并追加模板块到file末尾。  

        W file  

        写并追加模板块的第一行到file末尾。  

        !  

        表示后面的命令对所有没有被选定的行发生作用。  

        s/re/string  

        用string替换正则表达式re。  

        =  

        打印当前行号码。  

        #  

        把注释扩展到下一个换行符以前。  

        以下的是替换标记  

        *  

        g表示行内全面替换。  

        *  

        p表示打印行。  

        *  

        w表示把行写入一个文件。  

        *  

        x表示互换模板块中的文本和缓冲区中的文本。  

        *  

        y表示把一个字符翻译为另外的字符(但是不用于正则表达式)  

  

4. 选项  

        -e command, --expression=command  

        允许多台编辑。  

        -h, --help  

        打印帮助,并显示bug列表的地址。  

        -n, --quiet, --silent  

        取消默认输出。  

        -i 参数 

        直接在原文件上进行操作 

        -f, --filer=script-file  

        引导sed脚本文件名。  

        -V, --version  

        打印版本和版权信息。  

  

5. 元字符集(\表示转义)

        ^  

        锚定行的开始 如:/^sed/匹配所有以sed开头的行。   

        $  

        锚定行的结束 如:/sed$/匹配所有以sed结尾的行。   

        .  

        匹配一个非换行符的字符 如:/s.d/匹配s后接一个任意字符,然后是d。   

        *  

        匹配零或多个字符 如:/*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个o的行。   

        x\{m,\}  

        重复字符x,至少m次,如:/o\{5,\}/匹配至少有5个o的行。   

        x\{m,n\}  

        重复字符x,至少m次,不多于n次,如:/o\{5,10\}/匹配5--10个o的行。  

6.sed程序实例

        1. 给文件中每行的结尾添加一行空行;

        

    解释:上面讲到 sed工具的使用格式  sed -[op] ‘ / 正则表达式/操作‘  file

                当正则表达式为空时  说明匹配所有行,G 表示 将保持空间的内容 追加到模式空间。

                保持空间默认有空行,因此该命令为 每行文本末添加了空行

                若 -[op]为  -i  则sed所做的 编辑 会 写入 源文件

        2. 用sed模拟tac功能

    解释:方法一 :为除第一行 每次将保持空间内容追加进模式空间;

                            然后整体拷贝进保持空间;

                            最后一行时 打印模式空间内容。

              方法二 :为除第一行 每次将保持空间内容追加进模式空间;

                           然后整体拷贝进保持空间;

                            除最后一行 删除模式空间内容  这时 会打印模式空间内容

            注意:action并不是只有一个  可以同时按序执行多个action 需用  ‘ ; ’隔开

        3. 追加匹配行到文件结尾 

            逻辑:将匹配行 追加进 保持空间  到最后一行时 从保持空间 追加 进模式空间 

    

        4. 行列转化

            分析:行列转换 实质为  将 ’\n‘ 与 ’自定义的 列分隔符 ‘相互 替换

            因为如果要转换则模式空间中至少要有一行以上的数据,因此可以每读入一行数据到模式空间的时候都将其追加到保持空间,当处理到最后一行的时候将模式空间与保持空间的内容交换,这时候模式空间里面就是file的内容,然后再进行整体的将‘\n’替换成空格;

                    5. 1~100求和

        

            出从1到指定数字的序列,之后将序列交给sed,首先将每一行都追加到保持空间内,如果是最后一行则交换保持空间和模式空间的内容,这时候再对交换后模式空间的内容进行处理,将所有的‘\n’都替换为‘+’,之后再交给bc计算工具处理就可以了;


            :a可以看做是一个标签,N表示不断地读入并且将其追加到模式空间内,ba表示跳到标签处,也就是如果不是最后一行就不断地读读读直到最后一行也被追加进来的时候,模式空间的内容就是序列的内容,此时再进行整体的将‘\n’替换成‘+’,同样的,将其交给bc计算出和;

        6. 打印奇数行和偶数行

    

        对于N来说是读入下一行追加到模式空间,而n则是读入下一行并且拷贝到模式空间,这里拷贝就会将模式空间原来的值覆盖掉,因此,先进行n再进行p操作打印出的就是偶数行,而先进行p操作再进行读入拷贝打印出的就是奇数行;(输出奇数行 时 ’p;N‘ 与 ’p;n‘ 结果一致 )

时间: 2024-10-07 19:06:33

shell脚本 sed工具练习的相关文章

shell脚本--sed工具

sed sed:它叫做流式编辑器,它的工作场景一般是在编辑器中,把一段文本按行读入sed中然后按指定的方式输出,这是它最基本的用法. 一.sed的基本操作: 1./pattern/action pattern为正则表达式,对满足pattern的行作action操作 例如 这条命令和grep基本一样,其中-n的意思是只将执行后面指令的显示出来,如果不加-n选项则会把所有信息显示以便并且把匹配到的多显示一遍,p的意思是打印,如果改成d则是删除.-i的话则会修改源文件 2./pattern/s/pat

shell 脚本-sed工具

sed 是一种在线编辑器,它一次处理一行内容.处理时,把当前处理的行存储在临时缓冲 区中,称为 "模式空间" (pattern space),接着用 sed命令处理缓冲区中的内容,处理完成后, 把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到文件末尾.文件内容并 没有 改变,除非你使用重定向存储输出. Sed主要用来自动编辑一个或多个文件:简化对文 件的反复操作: 基本使用: 1. /pattern/p :打印匹配pattern的行 使用 p命令需要注意 ,sed 是把待处理

&lt;zz&gt;linux运维自动化shell脚本小工具

from http://www.cnblogs.com/wang-li/p/5728461.html linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU #Sun Jul 31 17:25:41 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/hom

linux运维自动化shell脚本小工具

linux运维shell 脚本小工具,如要分享此文章,请注明文章出处,以下脚本仅供参考,若放置在服务器上出错,后果请自负 1.检测cpu剩余百分比 #!/bin/bash #Inspect CPU #Sun Jul 31 17:25:41 CST 2016 PATH=/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/wl/bin export PATH TERM=linux export TERM CpuResu

shell脚本加密工具

1. 加密工具 1.1 gzexe 1.1.1 说明 gzexe是用来压缩执行文件的程序.当您去执行被压缩过的执行文件时,该文件会自动解压然后继续执行,和使用一般的执行文件相同. 1.1.2 安装 Linux自带,不用单独安装. 1.1.3 用法 gzexe filename.sh 它会把原来没有加密的文件备份为 file.sh~ ,同时 file.sh 即被变成加密文件. 1.1.4 参数 -d 解开压缩文件 1.2 shc 1.2.1 说明 shc是一个专业的加密shell脚本的工具,它的作

远程shell脚本执行工具类

/** * 远程shell脚本执行工具类 */public class RemoteShellExecutorUtils { private static final Logger logger = LoggerFactory.getLogger(RemoteShellExecutorUtils.class); private Connection conn; /** * 服务器IP */ private String ip; /** * 用户名 */ private String user;

Makefile Shell 脚本;sed命令

1. 在Makefile中想使用shell脚本,需要添加"@"符号,例如: @if [ -d xxx ]; then \                        //-d 判断是否存在,在shell中,用[]号代替括号 rm -rf xxx;  \ fi; @cp -fv  xxx  xxxx     //-f 删除已经存在的目标文件而不提示  -v  cp命令将告诉用户正在做什么 例:  cp -fv temp temp2 显示: 'temp'  ->  'temp2'

shell脚本--grep工具

grep工具 shell命令行之所以便捷和它所支持的工具是离不开的,其中grep工具就是一个搜索神器,它可以搜索整个linux系统所有文件中的所有信息. grep的灵活使用离不开正则表达式 正则表达式是一种查找以及字符串替换操作,它只是一个字符串,没有长度的限制,但是一般却表较短.可以被认为是一种轻量级.简介.使用与特定领域的编程语言. 这里主要使用grep工具 grep工具一般用来做两件事,搜索文件和搜索指定字符串 grep常用命令 -a 不要忽略二进制数据. -b 在显示符合范本样式的那一行

Shell脚本sed命令

from:http://blog.csdn.net/engledb/article/details/19623087 六.常用范例 1.p命令 命令p用于显示模式空间的内容.默认情况下,sed把输入行打印在屏幕上,选项-n用于取消默认的打印操作.当选项-n和命令p同时出现时,sed可打印选定的内容. 例子: [plain] view plaincopy (1)sed '/my/p' datafile #默认情况下,sed把所有输入行都打印在标准输出上.如果某行匹配模式my,p命令将把该行另外打印