【问题标题】:How to substitute the characters à, è, ì, ò, ù in bash script如何在 bash 脚本中替换字符 à、è、ì、ò、ù
【发布时间】:2015-02-11 04:45:04
【问题描述】:

我必须重命名一个文件:IndennitàMalattia.doc 通过将字符 à 替换为 a'

以下 sed 命令在命令行中有效,但在 .sh 文件中无效。

echo $FILE | sed -e s/à/a\'/g

有人可以帮帮我吗? 谢谢!

【问题讨论】:

  • 您可能遇到了编码问题。确保文件和您的终端环境都使用 UTF-8。 (例如,export LC_ALL=it_IT.UTF-8 用于 shell,:set filenecoding=utf8 用于 vim)。

标签: bash shell unix sed


【解决方案1】:

如下所示更改您的 sed,

echo $FILE | sed "s/à/a'/g"

【讨论】:

    【解决方案2】:
    mv "${File}" "$( echo "${File}" | sed "s/à/a'/g;s/è/e'/g;s/ì/i'/g;s/ò/o'/g;s/ù/u'/g" )"
    

    和任何其他重音字符等效

    【讨论】:

      【解决方案3】:

      您可能会发现这个 Perl 脚本很有用。它将通过将所有重音变成撇号来重命名指定的文件:

      #!/usr/bin/env perl
      use v5.14;
      use autodie;
      use warnings;
      use warnings qw( FATAL utf8 );
      use utf8;
      use open qw ( :encoding(UTF-8) :std );
      use charnames qw( :full :short );
      
      use Unicode::Normalize;
      
      # if no args specified, use example from question
      @ARGV = qw(IndennitàMalattia.doc) unless @ARGV;  
      
      foreach my $old_name (@ARGV) {
        (my $new_name = NFD($old_name)) =~ s/\N{COMBINING GRAVE ACCENT}/'/g;
        say qq{Renaming "$old_name" to "$new_name"};
        rename $old_name, NFC($new_name);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-04-26
        • 2020-05-05
        • 2018-01-14
        • 1970-01-01
        • 1970-01-01
        • 2013-07-20
        • 1970-01-01
        相关资源
        最近更新 更多