查找一个字符并在每一行中删除它之前的所有内容

Finding a character and deleting everything before it on every line

我有 10000 多个我需要的卡拉 OK 文件列表 trim。

我看着 VIM 我的头很痛,我被告知尝试使用 Notepad++,但我正在努力使用搜索和替换功能。

这是我的列表示例

D:\Karaoke\karaoke\Backstage17\Queen - 17 - Hammer To Fall.cdg
D:\Karaoke\karaoke\Backstage17\Alabama - 15 - Tennessee River.cdg
D:\Karaoke\karaoke\Backstage17\Bee Gee's - 10 - You Should Be Dancing.cdg
D:\Karaoke\karaoke\Backstage17\Billy Joel - 01 - Piano Man.cdg
D:\Karaoke\karaoke\Backstage17\Reba McEntire - 08 - Somebody Should Leave.cdg
D:\Karaoke\karaoke\BrightSpark\BRSP03\Brsp003-18 - Locklin, Hank - Send Me The Pillow You Dream On.cdg
D:\Karaoke\karaoke\CHART HITS MONTHLY\Chm0002\CHM0002-19 - Diffie, Joe - Quittin' Kind, The.zip
D:\Karaoke\karaoke\CHARTBUSTERS198\CB90198-01 - Lewis, Huey & The News - Heart Of Rock 'N' Roll.zip
D:\Karaoke\karaoke\SFMW905\SFMW905-07 - Adventures Of Stevie V - Dirty Cash.cdg
D:\Karaoke\karaoke\UNSORTED 2\Karaoke I and J\JD Myers - When I Think About You.cdg
D:\Karaoke\karaoke\UNSORTED 3\Pocket Songs\PS-1299 Bobby Darin\PS1299-16 - Darin, Bobby - Mack The Knife.cdg
D:\Karaoke\karaoke\ZOOM TT TH\TOP TUNES\Elvis\Tu169-14 - Hound Dog - Presley, Elvis.cdg

我想了解如何从每行中找到最后一个“\”并将其删除。

所以他们会这样显示

Queen - 17 - Hammer To Fall.cdg 
Alabama - 15 - Tennessee River.cdg 
Billy Joel - 01 - Piano Man.cdg 
JD Myers - When I Think About You.cdg 
...

关闭 .cdg 扩展名很容易。有什么建议吗?

纯 Vim 正则表达式可能看起来不同,具体取决于 magic 设置,但在 magic 开启(默认)的情况下,删除包括最后一个斜线在内的所有内容的命令将是

:%s/.*\//

% 是覆盖整个缓冲区的范围,s/<replace_this>/<by_this>/ 是替换命令,.*\ 是任何字符后跟反斜杠(反斜杠应该被另一个反斜杠转义)。因为正则表达式默认是贪婪的,.*\ 将匹配所有字符直到最后一个反斜杠,而不是第一个。

虽然 Vim 有自己的正则表达式语法,但我总是更喜欢将 Perl 用于看起来总是一样的正则表达式。如果你的 Vim 是用 +perl 编译的,你可以做

:%perldo s/.*\//g

或者只是 运行 perl -npe 's/.*\//g' original_file > result_file 来自命令行。