Замена значения атрибута другим значением в SVG

Почти уверен, что он каким-то образом используется, и поэтому вы не можете его удалить. Относится ли snap к snaphot?

0
29.06.2020, 13:06
1 ответ

Первое, что вы делаете неправильно, это то, что вы путаете синтаксис команды 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
3
18.03.2021, 23:23

Теги

Похожие вопросы