AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 982090
Accepted
Smile
Smile
Asked: 2017-12-02 02:31:42 +0800 CST2017-12-02 02:31:42 +0800 CST 2017-12-02 02:31:42 +0800 CST

使用 perl 表达式重命名命令

  • 772

我可以成功使用以下命令,并且我对这个命令可以进行其他组合非常有信心:

rename 's/\.htm/\.html/' *.htm

但是我想了解更多关于它的信息,尤其是关于s它的信息。他们说这是一个 Perl 表达式。我没有学过 Perl 编程语言,所以我不知道为什么会有这样的's/\.htm/\.html/'争论。你能告诉我它是什么吗??谢谢阅读。

rename
  • 1 1 个回答
  • 7277 Views

1 个回答

  • Voted
  1. Best Answer
    pa4080
    2017-12-02T02:38:48+08:002017-12-02T02:38:48+08:00

    通常根据指定为命令的第一个参数的规则rename重命名提供的文件名。文件名由第一个后面的参数提供。

    示例命令 ( rename 's/\.htm/\.html/' *.htm) 中的第一个参数具有毛皮部分,在本例/中是这些部分的分隔符:

    s/regexp/replacement/[flags]
    
    1. 该s命令意味着替代:s/<old>/<new>/。将正则表达式与模式空间的内容相匹配。如果找到,用替换替换匹配的字符串。

    2. 与应替换的字符串匹配的正则表达式。在当前情况下,这只是字符串.htm。

      在大多数正则表达式中,点.匹配每个字符。在这种情况下,我们想按字面意思使用点,因此我们需要通过使用反斜杠\(引用单个字符)来转义它的特殊含义。

    3. 替换匹配到 2 的 sting/regexp。

    4. 当前示例中未显示的标志。例如,它可能是标志g- 将替换应用于正则表达式的所有匹配项,而不仅仅是第一个。假设我们有一个名为的文件my.htm-file.htm:

      • 原始命令rename 's/\.htm/\.html/' *.htm将以这种方式重命名文件:. 看看答案底部如何避免这个问题。my.html-file.htm

      • 通过添加g标志 - rename 's/\.htm/\.html/g' *.htm- 新文件名将是:.my.html-file.html

    根据文件名:*可以表示任意数量的字符(包括零个,换句话说,零个或多个字符)。shell 将扩展该 glob,并将匹配的文件名作为单独的参数传递给renameSo *.htm- 将匹配当前路径中以字符串结尾的所有文件名.htm。例如,如果你有1.htm, 2.htm, 3.htm, 4.htm,5.htm然后rename 's/\.htm/\.html/' *.htm传递完全相同的参数来重命名为运行:

    rename 's/\.htm/\.html/' 1.htm 2.htm 3.htm 4.htm 5.htm
    

    整个命令 ( rename 's/\.htm/\.html/' *.htm) 可以这样读取:

    rename `<substitute>/<the string ".htm">/<with the string ".html">/` <do it for all files in the current path that end with ".htm">
    

    当我们有一个名为my.htm-file.htm. 可能我们想在最后一个点之后更改文件名的最后一部分,即所谓的扩展名。为此,我们应该rename以这种方式修改命令:

    rename 's/\.htm$/\.html/' *.htm
    

    $符号与行尾匹配的地方,字面意思是“向后阅读”。

    ^- 匹配模式空间开头的空字符串,即出现在抑扬符之后的内容必须出现在模式空间的开头。(阅读更多)

    ^\(仅在正则表达式或子表达式的开头(即,之后或)充当特殊字符\|。但是,可移植脚本应该避免^在子表达式的开头,因为 POSIX 允许^在该上下文中将其视为普通字符的实现。

    $- 与 相同^,但指的是模式空间的结束。也仅在正则表达式或子表达式的末尾(即,或$之前)充当特殊字符,并且它在子表达式末尾的使用不可移植。\)\|


    参考:

    • Bash 初学者指南:Shell 扩展
    • GNU/Linux 命令行工具总结:通配符
    • perlre - Perl 正则表达式
    • GNU:sed,流编辑器
    • 在线正则表达式测试器
    • 12

相关问题

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve