Bashを使用して複数のファイルの一部を1つにマージする方法

Bashを使用して複数のファイルの一部を1つにマージする方法

私は次のような構造を持っています。各ディレクトリには名前は同じですが、内容が異なるファイルがあります。

lib- 
    |-filled
            |-A1K_plus.svelte
            |-A1K.svelte
            |- // more files
    |-outlined
            |-A1K_plus.svelte
            |-A1K.svelte
            |- // more files
    |-round
            |-A1K_plus.svelte
            |-A1K.svelte
            |- // more files
    |-sharp 
            |-A1K_plus.svelte
            |-A1K.svelte
            |- // more files

たとえば、filled/A1K_plus.svelte次のようなものがあります。

<script>
    export let size = '24';
    export let color = 'currentColor';
    export let ariaLabel = '1k_plus';
</script>

<svg
    xmlns="http://www.w3.org/2000/svg"
    width={size}
    height={size}
    fill={color}
    class={$$props.class}
    {...$$restProps}
    aria-label={ariaLabel}
    viewBox="0 0 24 24"
    ><path
        d="M19 // removed for brevity"
    /></svg
>

次のoutlined/A1K_plus.svelteような内容があります。

<script>
    export let size = '24';
    export let color = 'currentColor';
    export let ariaLabel = '1k_plus';
</script>

<svg
    xmlns="http://www.w3.org/2000/svg"
    width={size}
    height={size}
    fill={color}
    class={$$props.class}
    {...$$restProps}
    aria-label={ariaLabel}
    viewBox="0 0 24 24"
    ><path
        d="M19 3H5c-1.1 // removed for brevity"
    /><path
        d="M7.5 15H9V9H // removed for brevity"
    /></svg
>

など。一部にはpath最初のラベルがあり、一部にはpath中央に2つのラベルがあります。svg

今度は、各ファイルに対して、次を生成するすべてのファイルをマージしたいと思います。

<script lang="ts">
    export let size = '24';
    export let color = 'currentColor';
    export let ariaLabel = '1k_plus';
    export let variation = 'filled';
    let svgpath: string;
    switch (variation) {
        case 'filled':
            svgpath =
                '<path d="M10 10.5h1 // path from filled/A1K.svelte"/>';
            break;
        case 'outlined':
            svgpath =
                '<path d="M19 3H5c-1.1 // path from outlined/A1K.svelte " />';
            break;
        case 'round':
            svgpath =
                '<path  d="M19 3H5c-1.1 // path from round/A1K.svelte"/>';
            break;
        case 'sharp':
            svgpath =
                '<path d="M21 3H3v18h18V3zM9 // path from sharp/A1K.svelte"/>';
            break;
        case 'two-tone':
            svgpath =
                '<path  d="M5 19h14v-6.// path from two-tone/A1K.svelte"/>';
            break;
        default:
            svgpath =
                '<path d="M10 10.5 // same path as filled"/>';
    }
</script>

<svg
    xmlns="http://www.w3.org/2000/svg"
    width={size}
    height={size}
    fill={color}
    class={$$props.class}
    {...$$restProps}
    aria-label={ariaLabel}
    viewBox="0 0 24 24"
>
    {@html svgpath}
</svg>

Bashを使ってこれを行うことはできますか?

ベストアンサー1

bashを使用してこれを行うことができます。ただし、シェルツールでは不可能なXMLパーサーが必要です。 XMLも一般言語ではないので、see、grep、perl / pcreなどの古典的な正規表現ツールは役に立ちません。

シェルスクリプトでXMLパーサーのコマンドラインツールを使用する投稿がたくさんあります!少なくともこれにより、必要なタグの内容を抽出し、新しい有効なsvgを組み合わせることができます。

どちらにしても、タイプスクリプトを追加するにはもっと必要があります。

正直なところ、bashで試すのではなく、おなじみのより一般的なスクリプト言語を使用してください。シェルは独自の構文以外のコードを解析しないため、シェルでこれを実行しても利点はありません。

Python 3はデフォルトですべてのUnix / Linuxシステムで利用可能で、XMLパーサーに付属しており、「if」に必要なものなどのテンプレート文字列を処理できます。私はtsも動作すると思います。しかし、私はTypeScriptを使用したことがないので、これについて検証された主張をすることはできません。

おすすめ記事