如何使用终端/Bash 脚本将字符串插入目录中的所有文件

如何使用终端/Bash 脚本将字符串插入目录中的所有文件

我有一堆文件。

AcademicCapIcon.svelte        ArrowSmLeftIcon.svelte        CalculatorIcon.svelte
AdjustmentsIcon.svelte        ArrowSmRightIcon.svelte       CalendarIcon.svelte
...
...

所有文件都具有相同的格式。例如AcademicCapIcon.svelte有以下内容:

<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
  <path d="M12 14l9-5-9-5-9 5 9 5z"/>
  <path d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"/>
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 14l9-5-9-5-9 5 9 5zm0 0l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14zm-4 6v-7.5l4-2.222"/>
</svg>

我想在每个文件的开头插入以下内容。

<script>
  export let className = "h-6 w-6";
</script>


并插入到class={className}之后xmlns="http://www.w3.org/2000/svg"

例如上述AcademicCapIcon.svelte文件的最终结果将是:

<script>
  export let className = "h-6 w-6";
</script>

<svg xmlns="http://www.w3.org/2000/svg" class={className} fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
  <path d="M12 14l9-5-9-5-9 5 9 5z"/>
  <path d="M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"/>
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M12 14l9-5-9-5-9 5 9 5zm0 0l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14zm-4 6v-7.5l4-2.222"/>
</svg>

如何使用终端或 Bash 脚本执行此操作?

答案1

您可以使用一个小脚本来迭代 *.svelte 文件并将 sed 应用于每个文件:

for FILE in *.svelte; do
  sed -e '1i<script>\n  export let className = "h-6 w-6";\n</script>\n' -e 's/svg" fill/svg" class={className} fill/' $FILE >$FILE.new
done

输出文件将是带有 .new 扩展名的原始文件名,但如果您足够勇敢,请在 sed 命令中添加 -i 选项并删除末尾的 >$FILE.new

答案2

将插入内容放入其自己的文件中,然后尝试

sed 's|xmlns="http://www.w3.org/2000/svg"|& class={className}| ' insert_file orig_file
<script>
  export let className = "h-6 w-6";
</script>
<svg xmlns="http://www.w3.org/2000/svg" class={className} fill="none" viewBox="0 0 24 24" stroke="currentColor" aria-hidden="true">
.
.
.
</svg>

相关内容