从文件名中删除一串字符

从文件名中删除一串字符

我有一堆以该行结尾的文本文件www.thethinkfoundation.org,例如:

file1.www.thethinkfoundation.org.txt
file2.www.thethinkfoundation.org.txt
.
.
.

file100.www.thethinkfoundation.org.txt

我希望移除/删除www.thethinkfoundation.org

我在终端中尝试了以下命令来实现它:

for f in www.thethinkfoundation.org*; do mv "$f" "${f#thethinkfoundation.org}"; done

结果是:

file1..txt
file2..txt
.
.
.

file100..txt

提前感谢您提供有效的解决方案。

PS:我不想使用命令rename。我实际上正在寻找一个可以跨 Linux 和 *BSD 发行版运行的命令。我首选的文本编辑器是nano

答案1

基于子字符串替换Shell 参数扩展bash以及其他一些 shell中也可以通过两种方式实现:

第一的,你可以替换仅限第一次出现从左到右)如下模式:

${var/pattern/replacement}

第二,你可以替换所有事件像这样的模式:

${var//pattern/replacement}

其中,var包含字符串的变量/参数pattern是您想要在该字符串中查找和替换的模式,以及replacement您想要用来替换的替换项,该替换项pattern也可以留空,即${var//pattern/}如果您希望从字符串中删除该模式。

因此,您想要的解决方案将是这样的:

for f in *www.thethinkfoundation.org*; do
    echo mv -n -- "$f" "${f//www.thethinkfoundation.org./}"
done

我添加了echo一次试运行,以便您可以先测试它,然后取出echo并再次运行它来完成真正的工作。

相关内容