從檔案名稱中刪除/刪除字串

從檔案名稱中刪除/刪除字串

我有一堆以行結尾的文字文件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

子字串替換基於外殼參數擴展inbash和其他一些 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並再次運行它以完成實際工作。

相關內容