我有一堆以该行结尾的文本文件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
并再次运行它来完成真正的工作。