Сценарии оболочки - запуск регулярного выражения для изменения файла на месте, который включает имя файла - PullRequest
3 голосов
/ 20 июня 2010

У меня есть много html-файлов с именами 12345.html, 12346.html и т. Д. Мне нужно изменить "style.css" на "style-12345.css" или соответствующее имя файла.Я не уверен, какой инструмент использовать, рекомендации?

Ответы [ 3 ]

3 голосов
/ 20 июня 2010

Это довольно легко сделать с помощью цикла for и sed:

for i in *.html; do
    sed -i "s/style\\.css/style-`basename $i .html`.css/g" $i
done

Цикл запускает внутреннюю команду с $i, установленным для каждого имени файла .html. sed -i изменяет файл на месте. basename $i .html получает $i без суффикса .html (т. Е. Только число)

1 голос
/ 20 июня 2010

Найдите команду с именем rename. Он бывает двух видов, в зависимости от реализации.

Пакет perl предоставляет /usr/bin/prename, который использует регулярные выражения в стиле perl для переименования файлов. Как пример, эта команда

$ prename 's/foo/bar/ *foo* 

изменит 'foo' на 'bar' в каждом имени файла, содержащем 'foo'.

Пакет util-linux предоставляет /usr/bin/rename, который использует простую подстановку строк для переименования файлов. Как пример, эта команда

$ rename foo bar *foo*

будет иметь тот же эффект, что и первый.

prename намного мощнее, чем обычный rename, но эта сила означает, что его сложнее использовать.

0 голосов
/ 22 июня 2010
perl -pi -e 's/style.css/style-12345.css/g' *.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...