У меня есть куча текстовых файлов, которые заканчиваются строкой 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
Замена подстроки на основеРасширение параметров оболочкии bash
некоторых других оболочках можно добиться двумя способами:
Первый, вы можете заменитьтолько первое появление(слева направо) такого шаблона:
${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
и снова запустить, чтобы выполнить настоящую работу.