删除文本文件中的图案后的所有字符

时间:2011-04-26 13:19:45

标签: regex vim

我有一个包含数千行文字的文本文件。每行结束如

\\server\share\file.txt -> information

我希望在文件扩展名结束后删除空格后面的所有内容。所以“ - >”之后的所有内容(第一次引用后有空格)

你会怎么做?我想使用vim,因为我试图更多地了解它,但任何程序都会这样做;我想尽快完成这项工作。

5 个答案:

答案 0 :(得分:22)

您的描述是矛盾的。

  1. “文件扩展名结束后空格后的所有内容”
  2. “所以一切都在” - >“(第一次引用后有空格)”
  3. 你想要保留箭头吗?

    1只需完成:

    :%s/ ->.*/
    

    实际上,如果你确实想要在箭头之前保留空间,就像你说的那样,那就是:

    :%s/ ->.*/ /
    

    2可以通过以下方式完成:

    :%s/\( ->\).*/\1/
    

    如果您希望在替换之前查看搜索结果,可以先使用/:

    构建搜索
    /\( ->\).*
    

    这将突出显示所有结果,以确保您正在替换正确的东西。然后,您可以使用空搜索词执行replace命令,以使用上次搜索(突出显示的内容)。

    :%s//\1/
    

答案 1 :(得分:7)

如果你想保留箭头:

:%s/ ->\zs .*//

如果你想删除它:

:%s/ -> .*//

答案 2 :(得分:1)

积极的前瞻可能会起作用,类似于/(?= ->).*/来匹配并替换为空虚。

答案 3 :(得分:1)

全球替换

 -> .*

使用空字符串

(我假设您要删除->,即使您说“之后”。)

答案 4 :(得分:1)

这可以使用分割方法轻松完成。由于你的线条都是一样的,并且有一个特殊的箭头->符号,因此将其拆分并获得第一个元素

awk -F"->" '{print $1}' file

如果需要,可以重定向到新文件。