查找一个字符并在每一行中删除它之前的所有内容
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
来自命令行。
我有 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
来自命令行。