Dr.*_*lch 0 regex vim duplicates
假设我有一个包含多行的文件
A.B C B.DAT
E.F C F1.DAT
Run Code Online (Sandbox Code Playgroud)
我想识别那些我有重复的行(例如B).但只有当副本后跟.DAT时(注意每个元素A,B,C,......可以是任意长度)
所以在前面提到的例子中,第一行应该返回匹配而第二行不应该返回匹配.
我想继续删除副本(这将是B.DAT),那么我如何确保仅匹配每行的第二次出现?
这个正则表达式应该做你想要的(如果我理解你......)
/\(.\).*\zs\1\.DAT
Run Code Online (Sandbox Code Playgroud)
这转化为
\( 2: and "keep" it for later with `\1`
. 1: get any character
\) 2:
.* 3: Match any number of characters ...
\zs 4: (and set the start of the matched region)
\1 5: ... followed by the kept character (step 2)
\.DAT 6: followed by .DAT
Run Code Online (Sandbox Code Playgroud)
使用此正则表达式,您可以删除B.DATa
%s/\(.\).*\zs\1\.DAT//
Run Code Online (Sandbox Code Playgroud)
更新事实证明,副本可以包含多个字符.在那种情况下,正则表达式变为\(\S\+\).*\zs\1\.DAT.在\S\+现在匹配的非空白字符任何数量> 1 =,正则表达式的其余部分是相同的.
| 归档时间: |
|
| 查看次数: |
491 次 |
| 最近记录: |