gpt4 book ai didi

html - 如何将正则表达式模式匹配转换为小写以进行 URL 标准化/整理

转载 作者:可可西里 更新时间:2023-11-01 12:52:47 25 4
gpt4 key购买 nike

我目前正在尝试将我网站上的所有链接、文件和标签从 UPPERCASE.extCamelCase.ext 转换为 lowercase.ext.

我可以使用 href="[^"]*"src="[^"]*" 的正则表达式匹配来匹配页面中的链接这似乎可以很好地识别 HTML 中的链接和图像。

然而,我需要做的是获取匹配项并在匹配项上运行 ToLowercase() 函数。由于我有很多要解析的页面,因此我希望制作一个简短的 shell 脚本,该脚本将在指定目录上运行,并且模式匹配指定的正则表达式并对它们执行小写操作。

最佳答案

将所有常规文件重命名为小写的 Perl 单行代码:

perl -le 'use File::Find; find({wanted=>sub{-f && rename($_, lc)}}, "/path/to/files");'

如果您想更具体地了解哪些文件被重命名,您可以将 -f 更改为正则表达式或其他内容:

perl -le 'use File::Find; find({wanted=>sub{/\.(txt|htm|blah)$/i && rename($_, lc)}}, "/path/to/files");'

编辑:抱歉,在重读问题后,我发现您还想替换 文件中的出现:

find /path/to/files -name "*.html" -exec perl -pi -e 's/\b(src|href)="(.+)"/$1="\L$2"/gi;' {} \;

编辑 2:尝试这个,因为 find 命令使用 + 而不是 \; 因为多个文件被传递到而效率更高perl 一次(感谢来自另一篇文章的@ikegami)。它还处理 URL 周围的 '"。最后,它使用 {} 而不是 // 用于替换,因为您正在替换 URL(也许 URL 中的 / 混淆了 perl 或您的 shell?)。没关系,我在我的系统上尝试了两者,效果相同(两者都很好),但值得一试:

find . -name "*.html" -exec perl -pi -e \
'$q=qr/"|\x39/; s{\b(src|href)=($q?.+$q?)\b}{$1=\L$2}gi;' {} +

PS:我也有一台 Macbook,并使用带有 Perl 5.8.9 和 5.10.0 版的 bash shell 对其进行了测试。

关于html - 如何将正则表达式模式匹配转换为小写以进行 URL 标准化/整理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7746175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com