• 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行,都打印。也就是说,!是对前面取非,而不是对后面取非。

  • 相关阅读:
    ThinkPHP第八天(U函数放置在外部JS不会被解析,错误界面定制,错误信息变量)
    ThinkPHP第七天(F函数使用,项目分组配置,项目分组模板文件放置规则配置)
    thinkphp第二天
    ThinkPHP第五天(提交类型判定常量IS_POST等,错误页面种类,Model实例化方式,模板中使用函数,foreach循环,模板中.语法配置)
    高阶函数、函数嵌套和闭包
    递 归
    函数式编程
    命名空间
    函数的参数
    循环语句
  • 原文地址:https://www.cnblogs.com/nzbbody/p/4420213.html
Copyright © 2020-2023  润新知