나는 다음과 같은 구조를 가지고 있습니다. 각 디렉터리에는 이름은 같지만 내용이 다른 파일이 있습니다.
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를 사용한 적이 없기 때문에 이에 대해 검증된 주장을 할 수 없습니다.