• sed的不同执行方式


    1. 命令行执行多条sed命令

    1.1 命令行通过多条-e选项

    sed -e 'command1' -e 'command2' -e 'command3' 

    匹配root或nobody,或mail: 

    sed -n -e '/^root/ p' -e '/^nobody/ p' -e '/^mail/p' /etc/passwd

    1.2 用\换行

    Shell的换行符依然有效,这有利于提高长命令的可读性。

    1. sed -n -e '/^root/ p' \
    2. -e '/^nobody/ p' \
    3. -e '/^mail/p' /etc/passwd

    1.3 用 { }组合语句块

    1. sed -n '{
    2. /^root/ p
    3. /^nobody/ p
    4. /^mail/ p
    5. }' /etc/passwd

    2. sed脚本文件

    如果需要复用一组sed命令,可以把它们写入一个脚本文件,然后用命令行参数-f调用。

    数据文件data.txt内容:

    1. 101,Zhang san,Fu Jian
    2. 102,Li si,Shan Dong
    3. 103,Wang Wu,Bei Jing
    4. 104,Zhao Qian Sun,Zhe Jiang
    5. 105,Ge Lin,Shang Hai

    脚本文件cmd.sed

    1. s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
    2. s/^.*/<&>/
    3. s/Li/Lee/

    执行命令

    sed -f cmd.sed data.txt

    3. 注释

    sed脚本的注释行以井号#打头。为上面的脚本加上注释:

    1. # Swap field 1 (id) with field 2 (name)
    2. s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
    3. # Enclose the whole line within < and >
    4. s/^.*/<&>/
    5. # Replace Li with Lee
    6. s/Li/Lee/

    如果sed脚本 的首行的前两个字符为#n,那么sed会自动使用-n选项(不打印),这时打印需要脚本中显式调用p命令。

    4. 把sed作为命令解释器

    刚才演示的sed脚本执行过程,是从命令行用sed 命令加上-f参数选项调用的。那么,能否像shell脚本那样直接./执行呢?答案是肯定的。方法是在脚本的首行,调用sed作为命令解释器,换句话说,把脚本首行内容写为"#!/bin/sed -f"

    1. #!/bin/sed -f
    2. # Swap field 1 (id) with field 2 (name)
    3. s/\([^,]*\),\([^,]*\),\(.*\).*/\2,\1,\3/g
    4. # Enclose the whole line within < and >
    5. s/^.*/<&>/
    6. # Replace Li with Lee
    7. s/Li/Lee/

    然后,赋予脚本可执行权限:

    chmod 755 cmd.sed

    接下来执行它:

    ./cmd.sed data.txt

    效果和之前是一样的。 

    5. 直接修改输入文件

    sed缺省不会修改输入文件的内容。它会把修改后的内容输出到终端上。如果你需要保存修改后的内容,可以把它们重定向到另一个文件,或者用w命令写文件。如果你的目的就是修改源文件,那么,你还需要用新生成的文件覆盖源文件。

    sed本身提供了一个-i选项,可以轻松的实现这个目的。在使用它之前,请先备份自己的源始数据文件。

    sed -i -f cmd.sed data.txt

  • 相关阅读:
    leetcode 每日一题复盘(11.20~11.26)
    线性代数-Python-03:矩阵的变换 - 手写Matrix Transformation及numpy中的用法
    Linux进程、Cgroup、容器的内存指标
    边框图片知识
    8.基于SpringBoot3+Security6+JWT实现鉴权机制(二)
    elementui tree组件自定义内容,实现移入label显示操作按钮
    上帝视角一览大数据开发体系
    js几种常见的遍历方式
    9. Spring Boot2.5 实战 – 应用程序性 能监控
    day19正则表达式
  • 原文地址:https://blog.csdn.net/yetyongjin/article/details/132898000