zoukankan      html  css  js  c++  java
  • Linux行编辑器——ed

    实验文件test.txt内容

    root:x:0:0:root:/root:/bin/bash
    bin:x:1:1:bin:/bin:/sbin/nologin
    daemon:x:2:2:daemon:/sbin:/sbin/nologin
    adm:x:3:4:adm:/var/adm:/sbin/nologin
    lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
    sync:x:5:0:sync:/sbin:/bin/sync
    shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
    halt:x:7:0:halt:/sbin:/sbin/halt
    mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
    operator:x:11:0:operator:/root:/sbin/nologin
    games:x:12:100:games:/usr/games:/sbin/nologin
    ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
    nobody:x:99:99:Nobody:/:/sbin/nologin
    systemd-bus-proxy:x:999:998:systemd Bus Proxy:/:/sbin/nologin
    systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
    dbus:x:81:81:System message bus:/:/sbin/nologin
    polkitd:x:998:997:User for polkitd:/:/sbin/nologin
    tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
    sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
    postfix:x:89:89::/var/spool/postfix:/sbin/nologin
    chrony:x:997:995::/var/lib/chrony:/sbin/nologin
    lfs:x:1000:1000::/home/lfs:/bin/bash
    View Code

    当使用ed打开文件时,它显示了文件中的字符个数并定位在最后一行。

    [root@localhost ~]# ed test.txt 
    1045

    没有提示符。如果输入了ed不理解的命令,它将打印一个问号作为错误消息。可以输入打印命令p来显示当前的行。

    [root@localhost ~]# ed test.txt 
    1045
    wangyan
    ?
    p
    lfs:x:1000:1000::/home/lfs:/bin/bash
    View Code

    定位到某一行直接输入数字。超过范围时显示 ?

    字母d 可以删除当前行。1d就是定位到1行并删除1行

    除了实验数字定位某一行,还可以使用正则表达式。/regular/定位到包含regular的行。 /regular/d 定位到指定行并删除那一行,那一行的下一行成为当前行。但是这种删除方法只能删除整个文件自上到下第一次出现regular的行,要想删除所有包含regular的行,使用g/regular/d 

    ed中的替换指令s

      [address]s/pattern/replacement/flag

    [address]标记地址的方法就像前面介绍的那样,可以是数字,也可以是真正表达式。

    flag 如果是针对一行中首次命中就不写,如果是一行中所有命中就有g

    绿色字体字体这种格式仅仅是针对一行,要想匹配所有行需要在最左边加g

    例子:

    ①s/regular/complex/   #用“complex”取代当前行上首次出现的“regular”。由于没有指定地址,所以它只影响当前行上的第一次出现。
    ②s/regular/complex/g  #对于①,如果在当前行上没有找到“regular”则出现一个错误。为了寻找同一行上的多次出现,必须指定g作为标志
    ③/regular/s/regular/complex/g  #与②一样,只是地址不再是当前行而是自上到下包含regular的首行
    ④g/regular/regular/complex/g  #比③范围扩大了,整个文档包含regular的行都执行

    对于③④,地址和模式都是使用了正则表达式,这两者可以不一样,例如 g/regular expression/s/regular/complex/g

    如果地址和模式相同,可以指定//l来告诉ed。 例如 g/regular/s//complex/g

     grep来源于ed中的下面的全局命令:

      g/re/p

    ed也支持脚本化编辑。把命令单独放在文件中,然后文件作为ed的输入。格式如下:

    ed test < ed-script

    ed不是面向字符流的,并且文件本身会发生改变。ed脚本必须包含保存文件并退出编辑器的命令。它不产生到达屏幕的输出,但由特殊命令生成的东西除外。在ed中没有指定地址的命令只影响当前行。

    对于如下命令

    s/regular/complex/

    ①在ed中交互式地输入这个命令,则用“complex”取代当前行上第一次出现的“regular”。

    ②在ed脚本中,如果这是脚本中的第一个命令,那么它就只应用于文件的最后一行(ed的默认当前行)。

  • 相关阅读:
    这几个C++的坑,一旦踩中了,加班是肯定避免不了了!
    2020年11月编程语言排行榜:Java再掉一位排名,真的要跌落神坛了吗?
    自学编程的朋友想要了解怎么快速入门,我想给你这5个建议!
    来看看这些获奖的C语言程序!一个比一个秀,这就是强者的世界吗!
    【每天学点新知识】Linux操作系统下C语言多线程同步使用指南!
    听说IT行业只有高智商的人才能进得去,而且以男性居多,还必须专业对口?
    假如C++是一只箭,你会用它来射哪只雕?
    程序员常见的口头禅,最后一个笑掉大牙,网友:真实的一批!
    Python基础语法
    Python—“helloworld”
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9183889.html
Copyright © 2011-2022 走看看