zoukankan      html  css  js  c++  java
  • 理解功能强大的sed替换命令

    最近仔细看了一下sed命令,不得不感慨sed的强大功能,感觉能写半本书了。这能总结一些最常用的。

    替换并打印在屏幕上

    最常用的就是替换功能。
    sed 's/foo/bar/g'
    这条命令都比较熟,就是把所有foo替换成bar,但是前面的s和后面的g是什么意思?
    更一般的写法其实是
    sed 's/regrexp/replacement/g'
    s表示后面跟的是一个正则表达式regrexp,我们这里的正则表达式简化为一个单词foo,但是sed其实是支持正则表达式的。后面跟的g相当于Word里面的替换所有
    以下面的文本为例,

     This is the first apple. This is the second apple. This is the third apple.
     This is the forth apple.
     This is the fifth apple.
    

    sed 's/apple/APPLE/g' test.txt

    This is the first APPLE. This is the second APPLE. This is the third APPLE.
    This is the forth APPLE.
    This is the fifth APPLE.
    

    sed 's/apple/APPLE/3' test.txt

    只有某一行的apple出现第3次时,才会被替换掉。
    This is the first apple. This is the second apple. This is the third APPLE.
    This is the forth apple.
    This is the fifth apple.
    
    • 以上命令会将替换结果打印到屏幕上,不会改变文件本身
    • 整个文件都会被打印出来,包括被替换和没被替换的部分。可以加上-n命令使用静默模式,不过-n命令本身也有复杂的用法,这里就不介绍

    多条命令同时执行

    很多教程在介绍 -e参数时候说,这个命令加不加结果都一样。这属于理解有误,如果加不加都一样,这个参数就没有存在的必要了。正确的说法是,如果一次只执行一条sed命令,加不加-e参数没有区别

    -e参数的作用就是让你可以按顺序执行多条命令,比如
    sed -e 's/apple/APPLE/g' -e 's/APPLE/ORANGE/3' test.txt
    输出的结果是

    This is the first APPLE. This is the second APPLE. This is the third ORANGE.
    This is the forth APPLE.
    This is the fifth APPLE.
    

    上面这条命令首先把所有apple都替换成APPLE,然后把每行出现第3次的APPLE替换成ORANGE。

    替换并修改源文件

    以上所有操作只是把替换后的结果打印在屏幕上,并不会修改源文件。如果想要修改源文件,需要在命令前面加上-i参数。保险起见,加-i参数前最好先打印预览一下结果。

  • 相关阅读:
    持续集成(Continuous Integration),
    python的几个有趣点
    C++语言发展历史 & 基础知识
    [C++] Windows下的socket编程(这是一个简单的TCP/IP例子)
    office app 代码简析之 task pane app
    佳言玩具
    数据的图形可视化[R语言结果GML引发出来的调查]
    收藏的一系列教程帖子,很适合有一定基础,想要进阶的同学
    各种排序算法总结
    三层架构+存储过程实现分页
  • 原文地址:https://www.cnblogs.com/yaos/p/14014478.html
Copyright © 2011-2022 走看看