【问题标题】:VI replace a custom number of characters from a custom positionVI 从自定义位置替换自定义数量的字符
【发布时间】:2014-01-14 19:34:07
【问题描述】:

有一个这样的文本文件

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/bin/false

daemon:x:2:2:daemon:/sbin:/bin/false
mail:x:8:12:mail:/var/spool/mail:/bin/false
ftp:x:14:11:ftp:/srv/ftp:/bin/false
http:x:33:33:http:/srv/http:/bin/false

如何在VI中将字符串2-4中从第2到第5的所有字符替换为'X'?

更新: 有点像::2,4s//X/g 我想我需要一个正则表达式

UPD2::2,4s/^\(.\)...\|^$/\1XXX/ | 2,4s/^$/ XXX/

【问题讨论】:

    标签: text-editor vi substitution character-replacement


    【解决方案1】:

    仅限 Vim

    试试这个命令:

    :2,4s/\%2c.../XXX/
    

    地点:

    • 2,4 代表in strings 2-4
    • \%2c... 代表from 2nd to 5th
    • XXX 代表to 'X'

    Vim 和 Vi

    因为 Vi 没有 \%c,所以应该使用这个命令:

    :2,4s/^\(.\).../\1XXX/
    

    资源

    【讨论】:

    • 替代模式匹配失败。谢谢参考
    • 你用的是vim还是vi? vi 没有\%c。这个命令怎么样::2,4s/^\(.\).../\1XXX/?
    • 如何更改正则表达式使其不会忽略空字符串?
    • 您可以添加\|^$,但它不会在第一列插入任何字符。我认为连续应用两个替换会是更好的选择(第二个可能看起来像:2,4s/^$/ XXX/)。
    • 我尝试了不同的方法,得出的结论是 vi 在这种情况下不理解“OR”表达式。所以你是对的,连续两次换人将是一个很好的解决方案。我使用了以下表达式:2,4s/^\(.\)...\|^$/\1XXX/ | 2,4s/^$/ XXX/
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    相关资源
    最近更新 更多