我有一个包含数百个 SVG 文件的目录,这些文件基本上都是小图标。我想<title>icon name</title>
使用其文件名作为内容向每个图标添加一个元素,用空格替换所有连字符并删除扩展名。
作为示例,文件如下arrow-down-narrow.svg
:
<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M10.5 3.625a.75.75 0 0 1 .743.648l.007.102v10.438l2.22-2.218a.75.75 0 0 1 1.133.976l-.073.084-3.5 3.5a.754.754 0 0 1-.078.069l-.006.004h-.002l-.008.007a.747.747 0 0 1-.081.051l-.015.008a.744.744 0 0 1-.11.045l-.009.003a.707.707 0 0 1-.221.033h-.028a.754.754 0 0 1-.046-.004l-.028-.003-.012-.002a.752.752 0 0 1-.085-.018l-.025-.007a.747.747 0 0 1-.068-.025l-.028-.012a.744.744 0 0 1-.21-.149l-3.5-3.5a.75.75 0 0 1 .976-1.133l.084.073 2.22 2.219V4.375a.75.75 0 0 1 .75-.75z" fill="#000" fill-rule="nonzero"/></g></svg>
理想情况下,此更新将产生以下标记:
<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><title>arrow down narrow</title><g fill="none" fill-rule="evenodd"><path d="M10.5 3.625a.75.75 0 0 1 .743.648l.007.102v10.438l2.22-2.218a.75.75 0 0 1 1.133.976l-.073.084-3.5 3.5a.754.754 0 0 1-.078.069l-.006.004h-.002l-.008.007a.747.747 0 0 1-.081.051l-.015.008a.744.744 0 0 1-.11.045l-.009.003a.707.707 0 0 1-.221.033h-.028a.754.754 0 0 1-.046-.004l-.028-.003-.012-.002a.752.752 0 0 1-.085-.018l-.025-.007a.747.747 0 0 1-.068-.025l-.028-.012a.744.744 0 0 1-.21-.149l-3.5-3.5a.75.75 0 0 1 .976-1.133l.084.073 2.22 2.219V4.375a.75.75 0 0 1 .75-.75z" fill="#000" fill-rule="nonzero"/></g></svg>
这可能吗?
我正在玩弄这个,这似乎让我走上了正确的道路,但我完全不熟悉 sed 并且遇到了错误sed: RE error: illegal byte sequence
:
find . -name "*" -type f -print | xargs sed -i '' -e 's:svg">:svg">HELLO:g'
答案1
这是一个简单的解决方案。搜索 pwd 中的所有 svg 文件。将第一个 > 字符替换为 > + 标题标签信息。 find 中的文件名带有前缀,./
在$f
.
如果所有 svg 文件都以 svg 标签开头,如 OP 所示,这将起作用。这不适用于文件名中的空格。
前
<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><g fill="none"...
后
<svg width="21" height="21" xmlns="http://www.w3.org/2000/svg"><title>test.svg</title><g fill="none"...
仅使用一个 svg 文件对此进行了测试。备份原始文件。 svg目录下的命令:
find . -iname '*.svg' -exec bash -c 'f=$(printf $0|sed s_./__);sed -i s_\>_\>\<title\>$f\<\/title\>_ $0' {} \;