Bash를 사용하여 여러 파일의 일부를 하나로 병합하는 방법

Bash를 사용하여 여러 파일의 일부를 하나로 병합하는 방법

나는 다음과 같은 구조를 가지고 있습니다. 각 디렉터리에는 이름은 같지만 내용이 다른 파일이 있습니다.

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중간에 두 개의 레이블이 있습니다.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를 사용한 적이 없기 때문에 이에 대해 검증된 주장을 할 수 없습니다.

관련 정보