Linux 根据文件名提示更改文件内的内容

标签 linux perl replace

我知道如何在一组文件中进行搜索和替换:

perl -pi -w -e 's/search/replace/g;' *.php

因此我可以使用它来搜索关键字或词组并进行更改。但是我有一个更复杂的任务,我不知道该怎么做。

我想在我所有的 php 文件中进行搜索和替换,以搜索特定的关键字并将其替换为文件名减去扩展名。

示例:在文件 Mountains.php 中搜索关键字 Trees,在所有看到 Trees 的地方,将其替换为 Mountains

当然,我希望能够批量处理数百个具有不同名称的 php 文件,但是都包含搜索词 Trees。

如果有人正在寻找额外的挑战,哈哈,如果我能做一个更复杂的场景就更好了,比如......

示例:在文件 MountainTowns.php 中搜索关键字 Trees,在所有你看到 Trees 的地方,将其替换为“Mountain Towns”(注意多余的空格,大写字母可能会指示空格所在的位置)

感谢您抽空考虑我的问题。

最佳答案

好吧,文件名在 $ARGV 中,所以不需要做更多的工作。

perl -i -pe '($x=$ARGV)=~s{.php$}{};s{Trees}{$x}g' BlueMountains.php RedMountains.php

加入

$x=~s{(.)([A-Z])}{$1 $2}g;

在大写字母前加空格,为整行

perl -i -pe '($x=$ARGV)=~s{.php$}{};$x=~s{(.)([A-Z])}{$1 $2}g;s{Trees}{$x}g' BlueRedMountains.php

关于Linux 根据文件名提示更改文件内的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9592306/

相关文章:

linux - Linux 上是否还存在 Thundering Herd 问题?

html - 将具有特定 ID 的 HTML 表单封装在新标签中

php - 在 PHP 中删除从第一个字符出现到字符串末尾的所有内容

asp.net - 如何将 SOAP::Lite 与 WCF 结合使用?

c++ - XML::CanonicalizeXML Perl 包安装在 Windows 上

mysql - 如何使用 vim 文本编辑器删除文本文件中出现的任何非法新行?

linux - 在 32 位系统中对 64 位字的操作

linux - 在 bash 脚本中获取子字符串

linux - 无法理解 setuid/setgid

perl - 在 Perl 中安装 GD.pm 时启用 PNG 支持