gpt4 book ai didi

regex - 在每行 vi/vim/sed 等上第一次出现

转载 作者:行者123 更新时间:2023-12-04 23:06:30 24 4
gpt4 key购买 nike

使用 VI 替换第一个出现/实例非常简单。

    :%s/search/replace/args

但是,这是我的 .csv 格式/文件中的数据集:
"192.168.2.1","www.google.com","2009/01/11_10:00"," What a great website"
"192.168.2.2/driving/is/fun","-","2009/03/22_00:00","Driving website"
"192.168.2.4/boating/is/crazy","-","2009/03/22_00:00","Boating Website"
"192.168.2.5","www.cars.com","2009/04/27_00:00","What a good car website"

因此,您会注意到第一行有 4 列,这是 .csv 格式的理想行。

但是,在第二行中,有 4 列,但第一列仅接受 ip 地址,仅此而已,因此必须删除 192.168.2.2/driving/is/fun 或用“,”.csv 分隔符分隔。

在 vi 中,我能够使用以下内容:
    :/^"\d\{,3}\.\d\{,3}\.\d\{,3}\.\d\{,3}\//s/\//","/

它执行以下操作:
  • /^"\d{,3}.\d{,3}.\d{,3}.\d{,3}/- 设置一个 anchor ,用正斜杠/在第一个 IP 处开始搜索。对于例如,第 2 行:“192.168.2.2/
  • /s///","/- 替换 IP 地址末尾的/并将其替换为 .csv 分隔符 ","

  • 这在 VI/VIM 中效果很好,一次完全替换了我需要的一行。但是,数据集要大得多,并且手动使用以下 vi 搜索和替换非常耗时。我正在寻找编写脚本或找到替代解决方案,因为 VI/VIM 一次只能执行一行,以下 :s/search/replace/g 替换行上的每个/另外更改日期列。

    显然,我尝试了以下方法:

    在替换开始处为整个文件添加 % ,如下所示:
        :/^"\d\{,3}\.\d\{,3}\.\d\{,3}\.\d\{,3}\//%s/\//","/

    它突出显示了我需要修改但出错的每个条目:
        E492: Not an editor command: /^"\d\{,3}\.\d\{,3}\.\d\{,3}\.\d\{,3}\//%s/\//

    这是相当困惑的。

    我最终想使用 sed/perl 一次性编写整个文件的编辑脚本。

    所以..

    "192.168.2.2/--> "192.168.2.2","

    每行第一次出现。

    任何帮助将不胜感激..

    谢谢!

    最佳答案

    在 vi/vim 中,您可以指定要替换的搜索范围。在这种情况下,您需要 :%s替换所有行:

    :%s/search/replace/g

    您还可以指定:
    :2,5s/search/replace/g      Replace on lines 2-5
    :.,$s/search/replace/g Replace from current line (.) to last line ($)
    :.,+3s/search/replace/g Replace on the current line (.) and the two next lines (+3)
    :g/^asd/s/search/replace/g Replace on lines starting with 'asd'.

    然后,您可以将其与更简单的模式结合起来,在整个文件中进行所需的替换:
    :%s/^\("[^/"]*\)[^"]*"/\1"/

    这将从 CSV 中的第一个条目中删除 IP 地址之后的所有内容。
    :%s/^\("[^/"]*\)\/\([^"]*\)"/\1","\2/

    这会将第一个条目拆分为 IP 地址和其余条目,尽管这只会对 IP 后有斜杠的那些行执行。
    您要做的是找到模式,转到该行然后替换。在这种情况下添加 '%' 会使命令无效。

    关于regex - 在每行 vi/vim/sed 等上第一次出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11022342/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com