sed处理流程

sed的处理流程,简化后是这样的:

1.读入新的一行内容到缓存空间;

2.从指定的操作指令中取出第一条指令,判断是否匹配pattern;

3.如果不匹配,则忽略后续的编辑命令,回到第2步继续取出下一条指令;

4.如果匹配,则针对缓存的行执行后续的编辑命令;完成后,回到第2步继续取出下一条指令;

5.当所有指令都应用之后,输出缓存行的内容;回到第1步继续读入下一行内容;

6.当所有行都处理完之后,结束。

sed基础用法

1.关于删除(d):

  删除某行:sed 'd' file   删除所有

       sed '1d' file sed '1,3d' sed -e '1d' -e '3d' file  删除指定行

  删除匹配的行或者字符:sed '/test/d' file 删除包含test字符的行

      sed '/test/!d' file 删除不包含test字符的行

      sed '/[0-9]\{3\}/d' file 删除包含三位数的行

      sed ‘s/^…//’ file           删除开头的三个字符

      sed ‘s/…$//’ file           删除结尾的三个字符

      sed 's/test//' file     删除test字符  (/g表示全局)

      sed '3s/test//' file     删除第3行中的test字符

  删除空格:

      sed '/1,/^$/d'  file      删除从第一行开始直到出现空格

      sed  '/^$/d' file    删除所有空行

      sed  's/^ *//g' file    删除行首的空格

2.关于显示和替换(s,p):  s模式与g搭配,全局替换  搭配n,跳过不匹配行,搭配I忽略大小写

//关于n:sed的执行流都是先读取一行到模式空间,然后执行编辑,再输出, 当前行完全处理后sed首先清空模式空间,然后自动再读取下一行到模式空间中。可以在执行编辑的过程中通过命令n来读取文件的下一行,此时模式空间里的内容被下一行完全替换,并且当前的行号增1,但是控制流没有回到起始点,而是在n命令后继续

  匹配:    sed –n '/test/p' file    显示含有test的行,-n跳过其他不符的行

替换并显示:  sed  -n 's/test/TEST/p' file

         sed  -n 's/test/TEST/gp' file  增加g,替换每一行中所有test字符

保存符合的样式:sed  -n  's/\(.*\):\(.*\)/\2\t\1/'    把第一个匹配到的样式保存在1中,以此类推

替换指定行字符:sed -n '/9/s/test/TEST/p' file  找到含有9字符的行,并把这行的test变成TEST

sed -n '/9/,/222/s/test/TEST/p' file 找到含有9字符的行和含有222字符的行,并把中间的这些行的test变成TEST

sed -n '9, 22s/test/TEST/p'  file 从第9行到22行之间的test变成TEST

  匹配ip地址替换成域名:sed 's/\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}/www.hello.com/g' file   注意在sed匹配中,特殊字符要进行转义

  分组命令: sed '/hello/,/hehe/{s/test/TEST/g;s/do/did/g}' file 在指定 描述限定下,想完成更多的操作使用大括号{} 匹配到/hello/开始,/hehe/结束

  替换的重定向:

      sed  's/hello/hi/g < file > file1       将file中的hello替换成hi,然后file1

      echo hello | sed 's/hello/hi'

  替换模式中的一些特殊字符:

        & :在正则表达式匹配单词时,可以使用&代替已经匹配的内容   sed 's/hehe/oo&oo/g' file   ==》 ooheheoo

        exp:  echo  "111 hello" | sed 's/[0-9][0-9]*/ & hao /         ==> 111 hao hello

        \1:保存第一个匹配到的样式

        !:相反与取反   sed '1,3!d'

        注意:如果需要匹配&字符需要\来转义

  另外:   中间的/只是用来分隔的,除了换行符其他都可以用 例如 : | !? 等      #sed 's?ko?hahaha?g' file

  样式匹配的应用:同事给我出的题  调换第一行和第三行的位置

# echo -e "a\nb\nc\nd"  |sed -e 'N;N;N' -e 's/\([a-z]*\)\n\([a-z]*\)\n\([a-z]*\)\n\([a-z]*\)/\3\n\2\n\1\n\4/'
c
b
a
d

3.关于编辑文件(a追加,i写入):    

    echo "a\nb\nc\n\d" |sed '/b/ aHELLO'  追加到匹配行

    echo "a\nb\nc\n\d" |sed '/b/,/d/ aHELLO'  从第一个匹配行开始,到第二个匹配行结束追加

写着写着就觉得需要赶紧买本sed&awk看看

关于sed用法的更多相关文章

  1. linux学习基础6之sed用法详解

    1 sed 又称为流编辑器,它逐行将文本文件中的行读取到模式空间中间去,将符合编辑条件的行进行编辑后输出到显示器上来.默认sed不编辑原文件只处理模式空间中的内容. 2 sed用法 sed [opti ...

  2. LeetCode(193. Valid Phone Numbers)(sed用法)

    193. Valid Phone Numbers Given a text file file.txt that contains list of phone numbers (one per lin ...

  3. sed用法说明

    sed介绍 sed:stream editor 是一个行编辑器,或叫流编辑器,每次处理一行,处理完一行再处理下一行.sed并不直接处理源文件,而是读取一行后放入模式空间(patten space)里, ...

  4. 【转载】linux之sed用法

    linux之sed用法 原文地址:http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html   sed是一个很好的文件处理工具 ...

  5. sed 用法

    sed 用法 sed的其他用法如下: 1.删除行首空格 sed 's/^[ ]*//g' filename sed 's/^ *//g' filename sed 's/^[[:space:]]*// ...

  6. [转帖]linux之sed用法

    linux之sed用法 https://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html docker images | awk ' ...

  7. linux之sed用法

    参考 http://www.cnblogs.com/dong008259/archive/2011/12/07/2279897.html sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行 ...

  8. sed用法

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

  9. 【转】 linux之sed用法

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法sed命令行格式为:         sed ...

随机推荐

  1. .NET LINQ 数据分组

    数据分组      分组指将数据放入组中以便每个组中的元素共享公共特性的操作.   方法 方法名 说明 C# 查询表达式语法 Visual Basic 查询表达式语法 更多信息 GroupBy 对共享 ...

  2. AngularJS--自定义指令和模板

    一.自定义指令: 1. 先创建模块    var app=angular.module("myApp",[]); 2. 创建自定义指令 (directive后面的参数一:自定义指令 ...

  3. BubbleSort冒泡排序

    #include <stdio.h>void BubbleSort(int *a,int n);int main(void){ int arr[10] = {2,4,6,8,0,1,3,5 ...

  4. java获取汉字拼音首字母 --转载

    在项目中要更能根据某些查询条件(比如姓名)的首字母作为条件进行查询,比如查一个叫"李晓明"的人,可以输入'lxm'.写了一个工具类如下: import java.io.Unsupp ...

  5. php curl 例子

    get方式: set_time_limit(0);        $url ='http://xxxxxxxx?pwd=wJ2312&s=1&e=2&d=1&t=asc ...

  6. 《C#本质论》读书笔记(16)构建自定义集合

    16.1 更多集合接口 集合类(这里指IEnumerable层次结构)实现的接口层次结构 16.1.1 IList<T>与IDictionary<TKey,TValue> 字典 ...

  7. js中时间戳转化成时间格式

    function formatDate(timestamp){ var test = new Date(parseInt(timestamp) * 1000); var $year = test.ge ...

  8. 疑问:line-height对非文字行内块的影响

    line-height:对子元素是非文字的行内块,表现出来的不是垂直居中.目前还不知道具体细节. 可以看出来两个东西不在一行.老师的解释是line-height对非文字元素解释不一样,但是我没懂细节. ...

  9. Leetcode Copy List with Random Pointer

    A linked list is given such that each node contains an additional random pointer which could point t ...

  10. JAVA_Android APK反编译就这么简单 详解(附图)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...