sed 命令批量更改 SVG 的填充和描边

sed command to batch change fill and stroke of an SVG

我有一个包含大约 300 个 SVG 图标的文件夹。全是黑色的。我想更改所有图标的填充和描边颜色(更改为蓝色阴影)。通过 Inkscape 做 300 是一项非常艰巨的工作。我看到了一些使用 sed 命令批量执行的示例。但是 none 适合我的 requirement.Can 有人帮我吗?我也愿意接受其他选择。我尝试将 IcoMoon 作为 GUI 选项,但不确定如何批量更改其中的颜色。

我正在使用 Ubuntu 18.04.

我不知道您的 SVG 的确切结构,但我假设您使用的是字体超赞的图标(SVG 格式)。

你说原来的颜色是黑色,所以这里有多个情况:

  1. XML
  2. 中没有填充和描边属性
  3. 填充和描边属性的值可以是"black"或"currentValue"

下面的脚本考虑了这两种情况:

#/bin/sh
COLOR=yellow
sed -i -E 's/fill\="[^"]+"//g; s/stroke\="[^"]+"//g' *.svg
sed -i "s/<path/<path fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg

您只需将目标颜色设置到 COLOR 变量中,并且不要忘记 运行 文件夹中的脚本。

我测试了字体超棒的 SVG 图标的脚本,它有效。

让我知道它是否适合你。

编辑: 对于 ionicons(大纲),请尝试以下脚本:

#/bin/sh
COLOR=yellow
sed -i -E 's/fill\="[^"]+"//g; s/stroke\="[^"]+"//g' *.svg
sed -i "s/<path/<path fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i "s/<rect/<rect fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i "s/<polygon/<polygon fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i "s/<circle/<circle fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i "s/<ellipse/<ellipse fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i "s/<polyline/<polyline fill=\"$COLOR\" stroke=\"$COLOR\"/g" *.svg
sed -i -E "s/stroke\:[^\;]+/stroke\:$COLOR/g" *.svg
sed -i -E "s/fill\:\#[0-9]+/fill\:$COLOR/g" *.svg