vim-如何查找具有指定数量的指定字符的行

vim-如何查找具有指定数量的指定字符的行,vim,Vim,我有100k行文件,有些行有未替换的撇号,如: ""Luis" number 4" 我想: "\"Luis\" number 4" 那么,我如何才能找到所有包含2个以上字符的行呢?在vim中是否可以轻松地执行此操作?否则,这是用于简单的脚本任务。您可以尝试 :%s/""\([^"]*\)"\(.*\)"/"\\"\1\\"\2"/ 分解如下: %s:每行替换 \v:非常神奇(不必逃避正则表达式中的所有参数) “(.*)”(.*)”(.*)”:引号中的任何内容 并替换为一个引号,所有内容

我有100k行文件,有些行有未替换的撇号,如:

""Luis" number 4"
我想:

"\"Luis\" number 4"
那么,我如何才能找到所有包含2个以上字符的行呢?在vim中是否可以轻松地执行此操作?否则,这是用于简单的脚本任务。

您可以尝试

:%s/""\([^"]*\)"\(.*\)"/"\\"\1\\"\2"/
分解如下:

  • %s
    :每行替换
  • \v
    :非常神奇(不必逃避正则表达式中的所有参数)
  • “(.*)”(.*)”(.*)”
    :引号中的任何内容

并替换为一个引号,所有内容直到开头的内部引号(
\1
),一个转义引号,内部引号(
\2
)中的所有内容,另一个转义引号,然后是其余内容(
\3
)和一个结束引号。

如果您只想找到这样的行,可以按如下方式搜索:

/.*".*".*".*
其中,
*
将匹配零个或多个字符,
是您要查找的文字引号


第一个和最后一个
*
模式并不是绝对必要的,但它们确保在找到搜索时突出显示整行。

如果你用一行代码回答,至少解释一下它的作用。答案很清楚,但不是我想要的-我需要查找行,不想在文件中自动替换。但是我需要的是上面的命令+c,比如确认每个替换。我的回答中已经提到了这个正则表达式,它将在OP的问题中进行查找和替换。很明显,“find”部分是独立工作的。@Two Bitalchest您的正则表达式版本有四个引号,并且包含括号,这些括号只是因为替换才需要,所以它不同。我只是简单地回答这个问题。好的,我可以把外部的<代码> *>代码>从你的手里,因为正则表达式已经在单词的中间匹配。我是否应该将此作为另一个单独的答案发布?最后的
*
不是绝对必要的,但确实要确保在找到搜索时突出显示整行内容(即,这是故意的)。我已经更新了我的答案来说明这一点。你可以对第一个
*
发表同样的评论。
/.*".*".*".*