zoukankan      html  css  js  c++  java
  • sed 笔记

    sed是一个非交互式文本编辑器,他可以对文本文件和标准输入进行编辑,标准输入可以是来自键盘,文件重定向,字符串,变量甚至来自于管道的文本。sed适用于以下三种场合:

    • 编辑相对交互式文本编辑器而言太大的文件。
    • 编辑命令太复杂,在交互式文本编辑器中难以输入的情况。
    • 对文件扫描一遍,但是需要执行多个编辑函数的情况

    调用sed有三种方式,一种为she'll命令行方式,另外两种是将sed命令写入脚本,然后执行该脚本文件。三种方式归纳如下:

    • shell命令行输入命令调用sed,格式为:
    1. sed [选项] 'sed命令' 输入文件
    • 将sed命令插入脚本文件后,通过sed命令调用它,格式为:
    • sed [选项] -f sed脚本文件 输入文件
    • 将sed命令插入脚本后,最常用的方法是将该脚本设置为可执行文件,然后直接执行该脚本,格式为:
    1. ./sed脚本文件 输入文件

    sed命令选项及意义:

    选项 意义
    -n 不打印所有行到标准输出
    -e 表示将下一个字符串解析为sed编辑命令,如果只传递一个编辑命令给sed,-e选项可以省略
    -f 表示正在调用sed脚本文件

    sed通常由定位文本行和sed编辑命令两部分组成,sed提供以下两种方式定位文本:

    1. 使用行号,指定一行或者行号范围
    2. 使用正则表达式

    下表是sed定位文本的方法

    选项 意义
    x x为指定行号
    x,y 指定从x到y的行号范围
    /patten/ 查询包含模式的行
    /pattern/pattern/ 查询包含两个模式的行
    /pattern/,x 从与pattern匹配的行到x行号之间的行
    x,/pattern/ 从x号行到与pattern匹配行之间的行
    x,y! 查询不包括x,y行号的行

    下面将在示例中说明sed的命令选项的意义,新建一个名为sedtest的文件,内容如下:(测试过程中可能会有修改)

    this is a test file for sed
    Test is real important
    what i want to say is: haha nobody is god except allah.
    This is very IMPORTYANT what you want to say is:goodbye! where to go? I don't know! this cool!
    •  -n选项
    #第一条命令,带-n选项,只打印第一行
    [root@linuxTest ~]# sed -n '1p' sedtest 
    this is a test file for sed
    #第二条命令,不带-n,不仅打印第一行,还打印输入文件的全部内容
    [root@linuxTest ~]# sed '1p' sedtest 
    this is a test file for sed
    this is a test file for sed
    Test is real important
    what i want to say is: haha
    nobody is god except allah.
    This is very IMPORTYANT

      #打印行范围

      root@linuxTest ~]# sed -n '2,6p' sedtest
      Test is real important
      what i want to say is: haha

    
    

      nobody is god except allah.
      This is very IMPORTYANT

     
    • -e选项
    #sed编辑命令“=”用来匹配is关键字的行号,如果希望行号和行内容都打印出来,则需要传递p和=两个编辑命令
    [root@linuxTest ~]# sed -n -e '/is/=' -e '/is/p' sedtest 
    1
    this is a test file for sed
    2
    Test is real important
    3
    what i want to say is: haha
    5

    -s选项

    #使用替换模式替换相应模式
    #p选项,只替换每行第一个符合条件的文本
    [root@linuxTest ~]# sed -n 's/is/IS/p' sedtest 
    thIS is a test file for sed
    Test IS real important
    what i want to say IS: haha
    nobody IS god except allah.
    ThIS is very IMPORTYANT
    what you want to say IS:goodbye!
    thIS cool!
    #2p,如果每行含有两个及两个以上目标文本,则只替换每行第二个符合条件的文本
    [root@linuxTest ~]# sed -n 's/is/IS/2p' sedtest 
    this IS a test file for sed
    This IS very IMPORTYANT
    #pg,如果该行中含有目标文本,则不论几个都替换。
    [root@linuxTest ~]# sed -n 's/is/IS/pg' sedtest 
    thIS IS a test file for sed
    Test IS real important
    what i want to say IS: haha
    nobody IS god except allah.
    ThIS IS very IMPORTYANT
    what you want to say IS:goodbye!
    thIS cool!
    #w,替换后,保存文本到另外一个文件
    [root@linuxTest ~]# sed -n 's/is/IS/gw output' sedtest 
  • 相关阅读:
    窗体句柄总是0
    该函数设置由不同线程产生的窗口的显示状态。
    zip压缩解压缩 项目icsharpcode-SharpZipLib-e012155
    VS(Microsoft Visual Studio2010)工具打开项目所需的应用程序,出现未安装(.csproj)的应用程序的解决办法
    Cocoa深入学习:NSOperationQueue、NSRunLoop和线程安全
    iPhone 6出现后,如何将一份设计稿支持多个尺寸?
    iPhone/Mac Objective-C内存管理教程和原理剖析
    What does the “__block” keyword mean?
    UIView frame, bounds and center
    ARC __bridge modifiers demystified
  • 原文地址:https://www.cnblogs.com/nurruden/p/6381915.html
Copyright © 2011-2022 走看看