vim正则表达式搜索csv字符串并粘贴匹配项

m42*_*m42 2 regex vim

编辑:

我需要有关在vim中使用正则表达式进行搜索的最佳方法的建议,并提取所发现的任何匹配项.


我有一个csv文件,看起来像这样:

两个领域:

  • ID

  • 描述


0g98932,"长描述有时包含1234567,或0000012345甚至BR00012345但始终包含文本的数字"

我需要搜索每一行的描述字段.如果第二个字段中存在匹配\ d {10}的数字,我想将其拉出来.

做点什么:% s/(\d{10})/^$1/g给我一个

找不到模式(\ d {10})错误.

我从来没有学过如何从vim中的正则表达式搜索中获取和引用匹配 - 所以这是问题的一部分.

另一部分:

我真的很想.

  1. 删除除前7位数字ID和匹配项以外的所有内容.
  2. id和匹配复制到另一个文件 - 或者复制到当前文件的顶部(某处 - 只是为了将匹配与未过滤的数据分开).

ram*_*ion 6

关于vim正则表达式的重要事项是需要转义不同的级别(与Perl或Ruby中的正则表达式相反)

:help /\m

after:    \v     \m       \M        \V    matches
                 'magic'  'nomagic'
          $      $        $         \$    matches end-of-line
          .      .        \.        \.    matches any character
          *      *        \*        \*    any number of the previous atom
          ()     \(\)     \(\)      \(\)  grouping into an atom
          |      \|       \|        \|    separating alternatives
          \a     \a       \a        \a    alphabetic character
          \\     \\       \\        \\    literal backslash
          \.     \.       .         .     literal dot
          \{     {        {         {     literal '{'
          a      a        a         a     literal 'a'
Run Code Online (Sandbox Code Playgroud)

默认设置是'magic',所以为了使你给的正则表达式有效,你必须使用:

:%s/".*\(\d\{10}\).*"/\1/
Run Code Online (Sandbox Code Playgroud)

如果你想删除除前7位数字和匹配之外的所有内容(我假设你的意思是你想要删除没有任何匹配的行)

:v/^\([[:alnum:]]\{7}\),\s*".*\(\d\{10}\).*/d
:%s//\1,\2/
Run Code Online (Sandbox Code Playgroud)

:v/<pattern>/命令允许您在每条与给定模式不匹配的行上运行命令,因此这只会删除不匹配项. :s//重用先前的模式,因此我们不必指定它.

这改变了以下内容:

0g98932,"long description sometimes containing numbers like 0123456789"
0g98932,"long description no numbers"
0g98932,"long description no numbers"
0g98932,"long description sometimes containing numbers like 0123456789"
0g98932,"long description no numbers"
0g98932,"long description no numbers"
0g98932,"long description no numbers"
0g98932,"long description no numbers"
0g98932,"long description sometimes containing numbers like 0123456789"
0g98932,"long description no numbers"
0g98932,"long description no numbers"
0g98932,"long description sometimes containing numbers like 0123456789"
Run Code Online (Sandbox Code Playgroud)

进入这个:

0g98932,0123456789
0g98932,0123456789
0g98932,0123456789
0g98932,0123456789
Run Code Online (Sandbox Code Playgroud)