这段代码:
perl -pe 's/^(\D\w+ \w+)( word )/\1;word/gi'
当输入包含带重音或特殊字符的单词时,代码将无法正常工作,例如:á,Ș。
细节说明:
我有这段代码来计算唯一艺术家文件的数量。
find /PATH/ -type f -exec basename "{}" + 2>/dev/null |
perl -pe 's/ - .*//g' | LC_ALL=C sort -f | uniq -c -i|
gsed -e 's/$/;/'|
awk '{numero=$1;$1=""}{print $0,numero}'|
perl -pe 's/^(\D\w+ \w+)( & )/\1;&/g' |
perl -pe 's/^(\D\w+ \w+ \w+)( & >)/\1;&/g' |
perl -pe 's/^(\D\w+ \w+ \w+ \w+)( & )/\1;&/g' |
perl -pe >'s/^(\D\w+ \w+ \w+ \w+ \w+)( & )/\1;&/g' |
perl -pe 's/^(\D\w+ \w+)( Con )/\1;Con/gi' |
perl -pe 's/^(\D\w+ \w+ >\w+)( Con )/\1;Con/gi' |
perl -pe 's/^(\D\w+ \w+ \w+ \w+)( Con >)/\1;Con/gi' |
perl -pe 's/^(\D\w+ \w+ \w+ \w+ \w+)( Con )/\1;Con/gi'|
perl -pe 's/^(\D\w+ \w+)( Și )/\1;Și/gi' |
perl -pe 's/^(\D\w+ \w+ \w+)( >Și )/\1;Și/gi' |
perl -pe 's/^(\D\w+ \w+ \w+ \w+)( Și )/\1;Și/gi' |
perl >-pe 's/^(\D\w+ \w+ \w+ \w+ \w+)( Și )/\1;Și/gi'| > /PATH/File.txt
我有这些文件:
Betty Curtis & Orchestra - 歌曲标题 Betty Curtis Con Johnny Dorelli - 歌曲标题 Betty Curtis - 歌曲标题 Margareta Pâslaru - 歌曲标题 Margareta Pâslaru & Grup - 歌曲标题 Margareta Pâslaru Și Sincron - 歌曲标题 Matilde Sánchez - 歌曲标题 Matilde Sánchez Con El Mariachi Vargas De Tecalitlán - 歌曲标题期望输出结果为:
Betty Curtis; 3 Margareta Pâslaru; 3 Matilde Sánchez; 2而实际输出结果是:
Betty Curtis; 3 Margareta Pâslaru; 1 Margareta Pâslaru & Grup; 1 Margareta Pâslaru Și Sincron; 1 Matilde Sánchez; 1 Matilde Sánchez Con El Mariachi Vargas De Tecalitlán; 1
确实,这段代码非常复杂(整个脚本共有19行......)。 规则是如果名称中有连词或括号,则截断名称,除非该名称由单个单词组成。 如果没有连词或括号,则完整保存名称。
例如:“Gervis Quebodeaux Rayne Serenaders”仍然是“Gervis Quebodeaux Rayne Serenaders”;
我想压缩“Perl-pe”部分:(D w + w +),(D w + w + w +)等...很无聊。 但我不知道该如何做到。
我必须在概述和尽可能保留更多信息之间找到平衡点。
目前我有30个案例(规则),除了“&”以外还有世界上许多语言中的“With”“Con”“e”“Y”“Et”“Und”等等。
该脚本运行良好,但不能处理带有重音和特殊字母的名称
该脚本的工作原理如下:
例如,我有许多Duke Ellington的文件,其中有许多不同的历史标题。
杜克·艾灵顿:2个文件 杜克·艾灵顿和棉花俱乐部管弦乐团:3 杜克·艾灵顿和他的著名管弦乐团:7 杜克·艾灵顿和他的著名管弦乐团;(与本·韦伯斯特一起):4 杜克·艾灵顿和他的著名管弦乐团;(与约翰尼·霍奇斯一起):3 杜克·艾灵顿和他的乐团:129 杜克·艾灵顿和他的乐团(与本·韦伯斯特一起):14 杜克·艾灵顿和他的乐团(与约翰尼·霍奇斯一起):8 杜克·艾灵顿和他的乐团(pn.):2 杜克·艾灵顿和他的乐团(v. Al Hibble):1 杜克·艾灵顿和他的乐团(v. Al Hibbler):1 杜克·艾灵顿和他的乐团(v. Herb Jeffries):9 杜克·艾灵顿和他的乐团(v. Ozzie Bailey):1 杜克·艾灵顿和他的乐团(v. Ozzie Bailey,Ray Nance Vln.):1 杜克·艾灵顿和他的乐团;(v. Ray Nance?):1 杜克·艾灵顿和他的乐团;(v.M):1 杜克·艾灵顿(与节奏男孩(2°c Bing Crosby,Al Rinker和Harry Barris)一起):1 杜克·艾灵顿(与节奏男孩(Bing Crosby,Al Rinker和Harry Barris)一起):1 杜克·艾灵顿(v. Dick Robertson):1 杜克·艾灵顿与贝西伯爵:3 杜克·艾灵顿与杰拉尔德·威尔逊:13 杜克·艾灵顿的太空人:1 杜克·艾灵顿的华盛顿乐团:1通过生成此文件的脚本的工作
杜克·艾灵顿; 2 杜克·艾灵顿;&棉花俱乐部管弦乐队; 3 杜克·艾灵顿;&他的著名乐团; 7 杜克·艾灵顿;&他的著名乐团;(ft.本·韦伯斯特); 4 杜克·艾灵顿;&他的著名乐团;(ft.约翰尼·霍奇斯); 3 杜克·艾灵顿;&他的乐团; 129 杜克·艾灵顿;&他的乐团;(ft.本·韦伯斯特); 14 杜克·艾灵顿;&他的乐团;(ft.约翰尼·霍奇斯); 8 杜克·艾灵顿;&他的乐团;(pn.); 2 杜克·艾灵顿;&他的乐团;(v.阿尔·希布尔); 1 杜克·艾灵顿;&他的乐团;(v.赫伯·杰弗里斯); 9 杜克·艾灵顿;&他的乐团;(v.奥兹贝·贝利); 1 杜克·艾灵顿;&他的乐团;(v.奥兹贝·贝利,雷·南斯小提琴); 1 杜克·艾灵顿;&他的乐团;(v.雷·南斯?); 1 杜克·艾灵顿;&他的乐团;(v.M); 1 杜克·艾灵顿;(ft.节奏男孩(2°c 金·克劳斯比,阿尔·林克尔和哈里·巴里斯)); 1 杜克·艾灵顿;(ft.节奏男孩(金·克劳斯比,阿尔·林克尔和哈里·巴里斯)); 1 杜克·艾灵顿;(v.迪克·罗伯逊); 1 杜克·艾灵顿;与贝西共同演出; 3 杜克·艾灵顿;与杰拉尔德·威尔逊共同演出; 13 杜克·艾灵顿;太空人; 1 杜克·艾灵顿;华盛顿人; 1
这是输出结果:
杜克·艾灵顿:208