zoukankan      html  css  js  c++  java
  • Linux sed 命令

    Linux sed 命令

    Linux sed 命令是利用脚本来处理文本文件。

    sed 可依照脚本的指令来处理、编辑文本文件。

    Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

    语法

    sed [-hnV][-e<script>][-f<script文件>][文本文件]

    参数说明

    • -e<script>或--expression=<script> 允许对输入数据应用多条 sed 命令编辑
    • -f<script文件>或--file=<script文件>从 sed 脚本中读入 sed 操作。和 awk 命令的-f 非常类似。
    • -h或--help 显示帮助。
    • -n或--quiet或--silent 仅显示script处理后的结果。
    • -r在 sed 中支持扩展正则表达式。
    • -i: 用 sed 的修改结果直接修改读取数据的文件,而不是由屏幕输出

    动作说明

    • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
    • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
    • d :删除,因为是删除啊,所以 d 后面通常不接任何咚咚;
    • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
    • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
    • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

    注:a c i  插入多行时,除最后 一行外,每行末尾需要用“”代表数据未完结。

    对 sed 命令大家要注意,sed 所做的修改并不会直接改变文件的内容(如果是用管道符接收的命令的输出,这种情况连文件都没有),而是把修改结果只显示到屏幕上,除非使用“-i”选项才会直接修改文件。

     1.查看指定行

    [root@iZ1la3d1xbmukrZ ~]# cat student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]# sed -n '2p' student.txt
    1       Lm      82      95      86      87.66
    [root@iZ1la3d1xbmukrZ ~]#

    2.删除2-4行(对本身文件不修改)

    [root@iZ1la3d1xbmukrZ ~]# sed '2,4d' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    
    [root@iZ1la3d1xbmukrZ ~]# cat student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]#

    3.添加数据

    [root@iZ1la3d1xbmukrZ ~]# sed 2ahello student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    hello
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66
    [root@iZ1la3d1xbmukrZ ~]# sed '2i hello 
    > world' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    hello
    world
    1       Lm      82      95      86      87.66
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66

    4.替换数据

    [root@iZ1la3d1xbmukrZ ~]# cat student.txt | sed '2c No such person
     No such person
    '
    ID      Name    PHP     Linux   MySQL   Average
    No such person
     No such person
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]#

    5 字符串替换

    “c”动作是进行整行替换的,如果仅仅想替换行中的部分数据,就要使用“s”动作了。s 动作的格式是:

    [root@localhost ~]# sed ‘s/旧字串/新字串/g’ 文件名

    直接进行简单替换

    [root@iZ1la3d1xbmukrZ ~]# sed 's/74/99/g' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    2       Sc      99      96      87      85.66
    3       Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]#

    正则进行替换

    [root@iZ1la3d1xbmukrZ ~]# cat student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    2       Sc      74      96      87      85.66
    3       Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]# sed '4s/^/#/g' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1       Lm      82      95      86      87.66
    2       Sc      74      96      87      85.66
    #3      Tg      99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]#

    执行多个替换

    [root@iZ1la3d1xbmukrZ ~]# sed -e 's/Lm//g ; s/Tg//g' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1               82      95      86      87.66
    2       Sc      74      96      87      85.66
    3               99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]# sed -e 's/Lm//g
    > s/Tg//g' student.txt
    ID      Name    PHP     Linux   MySQL   Average
    1               82      95      86      87.66
    2       Sc      74      96      87      85.66
    3               99      83      93      91.66
    
    [root@iZ1la3d1xbmukrZ ~]#

    “-e”选项可以同时执行多个 sed 动作,当然如果只是执行一个动作也可以使用“-e”选项,但是这时没有什么意义。还要注意,多个动作之间要用“;”号或回车分割。

  • 相关阅读:
    文件处理
    集合 字符编码
    3-11作业
    win 10 在vs2017下对mpi的安装以及认识
    java中二维数组的排序
    java中Arrays的用法
    java中随机二维数组中寻找最大值并输出坐标
    用java打印图形
    面向对象object与constructor
    for each in for in 与for of
  • 原文地址:https://www.cnblogs.com/dalianpai/p/12694864.html
Copyright © 2011-2022 走看看