sed工具使用


一. sed介绍

1. sed是一个很好的文本处理工具,本身也是一个管道命令。sed可以接收标准输入,主要是以行为单位,能够对数据进行替换,删除,新增,选取特定行等功能。


2. sed命令的格式

    sed [-nefr] 'commond' file

    -n:使用安静模式。在一般的sed命令中,所有来自stdin的数据一般都会被列出到屏幕上,但如果加上-n参数后,则只有经过sed特殊处理的那一行才会被列出来。

    -e:直接在命令行模式上进行sed的动作编辑

    -f: 直接将sed的动作写到一个文件中,-f filename则可以执行filename内的sed动作

    -r: sed的动作支持的是扩展正则表达式的语法

    -i: 直接修改读取的文件内容,而不是由屏幕输出(比较重要,一般都是直接修改原文件要加上-i参数)


3. sed常用命令

    a: 新增,a后面接字符串,新增字符串在目前的下一行

    c: 替换,c后面接字符串,把指定行的内容替换为字符串

    d: 删除,因为是删除则d后面通常不接任何的参数

     i: 插入, i后面接字符串,把字符串插入到当前的上一行

    p: 打印,也就是将指定的行打印出来,一般和sed -n一起出现

    s: 替换,可以直接进行替换工作。通常这个s的工作和正则表达式一起出现


二. sed使用举例

    假设有个文件为in.txt,如果是想直接输出到屏幕则不加-i,如果要修改文件则加上-i参数。以下例子默认不加-i参赛

    【a 增加】

    1. 在第一行后面插入字符串this is two line

        sed '1a this is two line' in.txt

    2. 在第二行后面插入字符串this is three line 

        sed '2a this is three line' in.txt

    3. 在最后一行插入字符串this is lase line

        sed '$a this is three line' in.txt


    【c 替换】

    1. 把第一行替换为 first

        sed '1c first' in.txt

    2. 把第3行到最后一行替换为end

        sed '3,$c end' in.txt

    

    【d 删除】

    1. 把第2行删除

        sed '2d' in.txt

    2. 删除第2行到第5行

        sed '2,5d' in.txt

    3. 删除in.txt中所有的包含test的行

        sed '/test/' d in.txt

    4. 删除没有"test"的行

        sed -i '/test/!d' in.txt

 

    【i 插入】

    1. 在第一行前面插入begin

        sed '1i begin' in.txt

   

    【p 打印】

    1. 可以使用cat,head等来打印,但是sed也可以用来打印

    2. 打印in.txt第5行到第7行

        sed -n '5,7p' in.txt   //-n表示安静模式,只有选择的几行才会被输出

    3. 打印第2行到最后一行

        sed -n '2,$p' in.txt

 

    【s 替换】

     1. sed 's/要替换的字符串/新的字符串/g' in.txt

     2. sed 's/hehe//g' in.txt  //作用是把所有的hehe单词删除

     3. sed 's/chenguolin/doubi/g‘ in.txt  //作用是把所有chenguolin单词替换为doubi

     4. echo "hehe s sdhe chenguolin:192.168" | sed 's/^.*lin://g'   //作用是在字符串开头把hehe s sdhe chenguolin:删除

     5. 注意正则表达式和通配符的不同。

         *在正则表达式中表示重复0个到无穷多个前一个字符,es*,可以表示es,ess,esss,essss

         *在通配符中表示任意个字符*.txt,可以表示.txt,a.txt,b.txt等      


三. 高级应用

     1. 把某个目录下所有名为TMP 替换为tmp。

         例如,要把当前目录下所有出现的TMP替换为tmp

         sed -i 's/TMP/tmp/g' `grep "TMP" -rl .`

         -r  -- 搜索子目录

         -l   -- 输出匹配的文件名

     2.          

 




上一篇:一份前端工程师招聘要求


下一篇:使用shell定制addm脚本