zoukankan      html  css  js  c++  java
  • sed命令

    1、sed一次读取一行数据,把读取的数据拷贝到模式空间,在模式空间(pattern space )内处理数据,然后读入下一行数据,直到结束。
    2、sed并不是直接处理原数据,而是对原数据的副本进行处理,因此没有改变原数据。如果想直接改变原数据,使用 -i cfg.cnf
    3、默认情况下,sed对每一行都进行处理。可以指定只对哪些行处理,有两种方式:
         a、地址范围,如1,4,对第1行到第4行的行进行处理。
         b、匹配模式,如/my,对包含my的行进行处理。
    4、sed的处理流程:从输入流中读取一行数据,放入模式空间,检查这一行是否需要处理(通过地址范围或者匹配模式),如果需要处理,在模式空间加工数据,然后把模式空间的内容,打印到标准输出。如果不需要处理,不处理,把模式空间的内容,打印到标准输出。清除模式空间的内容,读取下一行。
    5、sed在读取下一行之前,都先把处理后的模式空间内容,打印到标准输出。有些行,我不想打印,怎么办?
    6、有两种解决办法:
    a、对不想打印的行,执行d操作。相当于对模式空间执行d操作,模式空间为空(不是空行),打印到标准输出,也是为空。 b、对想要打印的行,执行p操作,这样就是把模式空间的内容打印到标准输出。同时使用-n选项,取消读取下一行之前,对模式空间内容的打印。
    7、sed取下一行之前,把模式空间的内容打印到标准输出,并且清除模式空间的内容,如果想保存模式空间的内容怎么办?
    使用保留空间(Hold Space)
    8、从模式/行为的角度理解。模式:一般是关系式或者正则表达式,对一条记录,进行匹配。行为:一般是一组命令,对匹配的记录进行处理,每个命令在前一个命令处理后的结果上,继续处理。
    9、可以认为sed有三层循环,第一层遍历所有的行,第二层遍历一组模式/行为,第三层遍历行为中的一组命令。
    10、特别注意!非的含义,'2p' 表示对第二行打印,'2!p' 不是表示对第2行不打印,而是表示除了第2行,都打印。也就是说,!是对前面取非,而不是对后面取非。

  • 相关阅读:
    使用过滤器解决JSP页面的乱码问题
    六度空间(MOOC)
    navicat连接mysql出现1251错误
    Saving James Bond
    列出连通集(mooc)
    File Transfer(并查集)
    堆中的路径(MOOC)
    智慧树mooc自动刷课代码
    Hibernate三种状态的区分。
    Hibernate中get和load方法的区别
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4420213.html
Copyright © 2011-2022 走看看