• 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的默认当前行)。

  • 相关阅读:
    使用扩展运算符实现数组,对象的深拷贝
    将图片文件转成BASE64格式
    怎么让input默认为0
    两次取反的意义
    css世界一
    Q&H
    .gitignore 中添加.vscode 无效
    百度小程序
    定位元素和opacity
    js 设置元素样式
  • 原文地址:https://www.cnblogs.com/kelamoyujuzhen/p/9183889.html
Copyright © 2020-2023  润新知