在每一行找到一个字符并删除它前面的所有内容

时间:2015-11-19 17:46:19

标签: vim notepad++

我有一张超过10000张的卡拉OK文件列表,我需要修剪。

我看着VIM,脑袋受伤了,我被告知尝试使用Notepad ++,我正在努力寻找和替换功能。

以下是我的清单

的示例
D:\Karaoke\karaoke\Backstage\8017\Queen - 17 - Hammer To Fall.cdg
D:\Karaoke\karaoke\Backstage\8317\Alabama - 15 - Tennessee River.cdg
D:\Karaoke\karaoke\Backstage\8717\Bee Gee's - 10 - You Should Be Dancing.cdg
D:\Karaoke\karaoke\Backstage\9117\Billy Joel - 01 - Piano Man.cdg
D:\Karaoke\karaoke\Backstage\9917\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\CHARTBUSTERS\90198\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扩展名关闭。有什么建议吗?

2 个答案:

答案 0 :(得分:3)

纯Vim正则表达式可能看起来有所不同,具体取决于magic设置,但启用magic(默认值)时,删除所有内容(包括最后一个斜杠)的命令将为

:%s/.*\\//

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

虽然Vim有自己的正则表达式语法,但我总是倾向于使用Perl来表示总是看起来相同的正则表达式。如果您的Vim使用+perl进行编译,则可以执行

:%perldo s/.*\\//g

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

答案 1 :(得分:0)

记事本++解决方案:

查找

.*\\([^\\]*)(\.cdg|\.zip)

替换为:

$1