【问题标题】:Underscore in rename command (Perl and Unix shell)重命名命令中的下划线(Perl 和 Unix shell)
【发布时间】:2012-04-20 18:36:49
【问题描述】:

我正在尝试将一个文件夹内所有文件名.mat 中的所有_ 下划线字符替换为- 连字符字符。 我输入不同的版本失败:

rename -f 'w/_/-' *.mat

谁能给我解释一下怎么回事?

【问题讨论】:

    标签: perl shell expression rename


    【解决方案1】:

    如果您使用的是 a Perl-based rename(如您的标签所示),那么 w 不是 Perl 正则表达式操作。

    rename -f 's/_/-/g' *_*.mat
    

    【讨论】:

    • 谢谢@Daxim。我仍然使用来自 Camel Book 第一版的 Perl rename 的轻微更新版本。
    • 这个作品!!!谢谢@Leffler。我起初尝试使用“s”,但后来改为“w”。但我不知道我必须在 final 使用 g
    • @escorciav:AFAIK,w 不是 Perl 替换运算符。末尾的g 确保所有下划线都替换为连字符。如果您只想映射第一个下划线,则不需要g。我想,脚本有可能自动应用g
    【解决方案2】:

    我无法理解您使用的是 shell 重命名还是 Perl 重命名:在这两种情况下我都无法理解您的命令。

    重命名当前目录中所有 *.mat 文件的 Perl 命令行脚本如下所示

    perl -e 'do { (my $f = $_) =~ tr/_/-/; rename $_, $f } for glob "@ARGV"' *.mat
    

    【讨论】:

    • glob "@ARGV" 替换为@ARGV。你正在 globbing 已经被 globbed 的东西。根据文件名,这要么什么都不做,要么给出错误的结果。具体来说,如果任何 mat 文件的名称中有空格,您的模式将失败。 [已修复]
    猜你喜欢
    • 2012-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2019-08-31
    • 1970-01-01
    • 2014-11-21
    相关资源
    最近更新 更多