Почти уверен, что он каким-то образом используется, и поэтому вы не можете его удалить. Относится ли snap к snaphot?
Первое, что вы делаете неправильно, это то, что вы путаете синтаксис команды find
с синтаксисом встроенной оболочкиfor
:
for i in. -type f -name "*.svg");
Это ничего не значит. Вы можете сделать это:
for i in *.svg
Или это:
find. -type f -name "*.svg"
Но вы не можете объединить их так, как вы это сделали. У вас также есть завершающая скобка, но давайте ее проигнорируем.
Далее вы используете ненужный grep
. Вы обрабатываете все файлы с помощью grep
, а затем снова обрабатываете некоторые из них с помощью sed
. Это не делает ничего более эффективным,если вы все равно собираетесь читать файл, вы также можете сделать замену там, где это необходимо.
Наконец, вы можете использовать одинарные кавычки, поэтому вам не нужно экранировать двойные кавычки, а sed
не понимает \d
, поэтому вместо этого используйте [0-9]
.
Итак, это должно делать то, что вы хотите , если все файлы находятся в одном каталоге:
find_string='height="[0-9]+"'
replace_string='height="{{ include.height }}"'
for i in *.svg;
do
sed -i -E "s/${find_string}/${replace_string}/" "$i"
done
Если вам нужно перейти в подкаталоги, вы можете вместо этого использовать find
. Если вы на 100% уверены, что в ваших именах файлов нет пробелов, новых строк или других пробелов, вы можете просто выполнить:
find_string='height="[0-9]+"'
replace_string='height="{{ include.height }}"'
find. -type f -name '*.svg' | while read i; do
sed -i -E "s/${find_string}/${replace_string}/" "$i"
done
Или, чтобы иметь дело с произвольными именами файлов, предполагая, что у вас есть GNU find
, используйте:
find_string='height="[0-9]+"'
replace_string='height="{{ include.height }}"'
find. -type f -name '*.svg' -print0 | while IFS= read -r -d '' i; do
sed -i -E "s/${find_string}/${replace_string}/" "$i"
done
В качестве альтернативы, если вы используете bash
, вы можете выполнить:
shopt -s globstar
find_string='height="[0-9]+"'
replace_string='height="{{ include.height }}"'
for i in **/*.svg;
do
sed -i -E "s/${find_string}/${replace_string}/" "$i"
done