Linux 如何使用Perl脚本将字符串中的特殊字符替换为下划线?

Linux 如何使用Perl脚本将字符串中的特殊字符替换为下划线?,linux,perl,Linux,Perl,我有一个脚本,记录了mythtv录制的节目,并使用手刹在h264中对其进行编码。脚本是用Perl编写的 我的问题是如何使用perl将空格和特殊字符替换为空格和下划线 当输出“公园和娱乐-S05E01-Knope女士去华盛顿”时,字符串看起来像这样 我希望它看起来像这样 帕克斯和康乐俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱

我有一个脚本,记录了mythtv录制的节目,并使用手刹在h264中对其进行编码。脚本是用Perl编写的

我的问题是如何使用perl将空格和特殊字符替换为空格和下划线

当输出
“公园和娱乐-S05E01-Knope女士去华盛顿”时,字符串看起来像这样

我希望它看起来像这样

帕克斯和康乐俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部


提前谢谢。我做了一些谷歌搜索,但发现了任何有用的东西,我可以实现。

类似的东西可以做到这一点-请注意,如果像这样转换字符串,可能会引入重复项

my $input ="Parks and Recreation - S05E01 - Ms. Knope Goes to Washington";

$input =~ s/ - /_/g; # Replace all " - " with "_"
$input =~ s/[^A-Za-z0-9]/_/g; # Replace all non-alphanumericals with "_"

print $input;
这将产生:

Parks_and_Recreation___S05E01___Ms__Knope_Goes_to_Washington
帕克斯和康乐俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部俱乐部

编辑

埃利斯下面的评论非常相关,这里有一个稍微好一点的方法,在替换之前用非重音字符替换重音字符:

use utf8;
use Unicode::Normalize;

my $input="La femme d'à côté";
my $result = NFD($input); # Unicode normalization Form D (NFD), canonical decomposition.
$result !~ s/[^[:ascii:]]//g; # Remove all non-ascii.
$result =~ s/ - /_/g; # Replace all " - " with "_"
$result =~ s/[^A-Za-z0-9]/_/g; # Replace all non-alphanumericals with _
print $result;
此变量输出:

拉乌·费姆·德乌·科特

这将产生:

Parks_and_Recreation___S05E01___Ms__Knope_Goes_to_Washington
您可以使用以下选项:

perl -pe 's/[^A-Za-z0-9]/_/g'
测试:

> echo "Parks and Recreation - S05E01 - Ms. Knope Goes to Washington"|perl -pe 's/[^A-Za-z0-9]/_/g'
Parks_and_Recreation___S05E01___Ms__Knope_Goes_to_Washington

如果他喜欢弗朗索瓦·特鲁法特?“La femme d’aôté”给出了“La_femme_d____c_t_”。不太漂亮^ ^@ÉricGuirbal:很好,我添加了一个更好的解决方案,可以处理重音字符。