• shell编程之sed


    sed是一个精简的、非交互式的流式编辑器,它在命令行中输入编辑命令和指定的文件名,然后在屏幕上查看输出。流式编辑器sed逐行读取文件内容存储在临时缓冲区,称为“模式空间”,

    接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。原文件内容并没有改变。

    一、简单用法示例

    sed [options] cmds  files

    选项:-e  连接多个编辑命令

       -f  指定sed脚本文件名

          -n 阻止输入行自动输出(无输出)

    例如:

    sed  '4,$d'  test.in :  d表示删除,命令表示从第四行开始删除,到最后一行。即前三行输出。原文件内容不变。分号中的内容就是cmd命令

    sed  '3q'  test.in:  q表示退出。处理到第三行时退出,即输出前三行

    sed  's/public/PUBLIC/'  test.in:  表示将public替换成PUBLIC。如果某行有多个public,只替换那行的第一个。

    sed  's/public/PUBLIC/g'  test.in:  将一行中多个public都替换掉。其他行原样输出

    sed  -n  's/public/PUBLIC/p'  test.in:   -n使所有行都屏蔽,即没有输出。但又希望public行输出,可利用p命令打印public行

    二、指定多个命令的方法:

    1、用分号隔开:

    sed  's/public/PUBLIC/;s/north/NORTH/'  test.in

    2、每个命令前放-e选项

    sed  -e  's/public/PUBLIC/'   -e  's/north/NORTH/'  test.in

    3、使用分行命令功能,在输入单引号后按return键就会出现多行提示符(>)

    sed  '

    > s/public/PUBLIC/

    > s/north/NORTH/'  test.in

    三、sed命令的语法

    sed_cmd: 使用格式

    [address] sed_edit_cmd  (通常用单引号括起来),其中adress为sed的行定位模式,用来指定将要被sed编辑的行。如果省略,sed将编辑所有的行。sed_edit_cmd为sed对被编辑行将要进行的编辑操作。

    1、address地址定位方式

    n表示第n行

    $表示最后一行  : sed -n '$p'  test.in   输出最后一行

    m,n:表示第m行到第n行

    /pattern/:查询包含指定模式的行。如/disk/、/[a-z]/

    /pattern/,n:表示从包含指定模式的行到第n行

    n,/pattern/:表示从第n行到包含指定模式的行

    /pattern1/,/pattern2/:表示从包含模式1的行到包含模式2的行

    !:反向选择,如m,n!的结构与m,n相反。

    2、常用的sed_edit_cmd

    p: 打印匹配行

    sed  -n  '3,5p'  test.in   打印第3到5行    -n阻止其他行的自动输出

    sed  -n  '$p'  test.in  打印最后一行

    sed  -n  '/north/p'  test.in  打印包含north行

    =:显示匹配行的行号

    sed  -n  '/north/='  test.in   输出所有包含north的行号

    d: 删除匹配的行

    sed  '/north/d'  test.in

    s:替换命令,使用格式为:

    [address] s/old/new/[gpw]

    g:全局替换

    p:打印被修改后的行

    w fname:将被替换后的行内容写到指定的文件中

    sed  -n  's/north/NORTH/gp'  test.in        全局替换并打印

    sed  -n  's/north/NORTH/w  data'  test.in    替换后的行写入到data文件

    sed  's/[0-9][0-9]$/&.5/'  datafile      :一个示例    datafile中为qw12   ====>   qw12.5

    &符号用在替换字符串中时,代表 被替换的字符串

    r: 读文件,将另一个文件中的内容附加到指定行之后

    sed  '$r  data'  test.in     将data文件内容到test.in文件末尾

    w:写文件,将指定行写入到另一个文件中

    sed  -n  '/public/w  data2'  test.in  :

    n:将指定行的下面一行读入编辑缓冲区

    sed  -n  '/public/{n;s/north/NORTH/p}'  test.in         将包含public行的下一行读入缓冲区,并对缓冲区进行替换输出

    sed  -n  '/public/n;s/north/NORTH/p'  test.in        将public下一行读入缓冲区,不操作;再将所有north行替换输出。这是两个编辑命令,与上面的不一样。

    对指定行同时使用多个sed编辑命令时,需要大括号“{ }”括起来,命令直接用分号";"隔开。注意与-e的区别

    四、sed命令配合正则表达式的应用

    以下两个命令都能显示vsftpd.conf中的配置行

    grep  -v  '^#'   /etc/vsftpd/vsftpd.conf      :#开头,取出所有注释行 ,未去除空行。 -v  反向匹配   

    cat  /etc/vsftpd/vsftpd.conf | sed 's/^#.*//g' | sed '/^$/d'      : 先替换掉所有#行,再去除所有空行

  • 相关阅读:
    沈逸老师PHP魔鬼特训笔记(1213) --异形
    《nodejs+gulp+webpack基础实战篇》课程笔记(五)-- 实战演练,构建用户登录
    《nodejs+gulp+webpack基础实战篇》课程笔记(四)-- 实战演练
    《nodejs+gulp+webpack基础实战篇》课程笔记(三)--webpack篇
    沈逸老师PHP魔鬼特训笔记(11)
    《nodejs+gulp+webpack基础实战篇》课程笔记(二)--gulp速度上手
    《nodejs+gulp+webpack基础实战篇》课程笔记(一)--开开脑,走走简单的基础
    沈逸老师PHP魔鬼特训笔记(10)
    沈逸老师PHP魔鬼特训笔记(9)--进化
    Alt.js的入门
  • 原文地址:https://www.cnblogs.com/wsw-seu/p/10822367.html
Copyright © 2020-2023  润新知