Terminal / Bashスクリプトを使用してディレクトリ内のすべてのファイルに文字列を挿入する方法

Terminal / 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を削除します。

おすすめ記事