텍스트(xpm) 파일의 줄을 어떻게 복사하나요?

텍스트(xpm) 파일의 줄을 어떻게 복사하나요?

나는 다음과 같은 몇 가지 픽스맵을 가지고 있습니다(정확히는 36개).

/* XPM */
static char * hide_active_xpm[] = {
"12 14 3 1",
"   c None",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"            ",
"            ",
"            ",
"            ",
" ....++.... ",
" ....++.... ",
" .......... ",
" .......... ",
" ++++++++++ ",
" ++++++++++ ",
" .......... ",
" .......... ",
" ....++.... ",
" ....++.... "};

4배(가로로 2배, 세로로 2배) 더 크게 만들고 싶습니다. Gtk 색상 선택을 위해 색상이 정의되어 있고 너무 많은 이미지를 편집하는 데 너무 많은 시간이 걸리기 때문에 이미지 편집기를 사용할 수 없습니다. 그럼 제게 명령/스크립트를 써주실 수 있나요?모든 픽셀 복제그리고모든 픽셀 라인을 복제합니다.(7행부터) 파일이 몇 개 있나요? 즉, 명령/스크립트로 이를 변경할 수 있습니다.

/* XPM */
static char * hide_active_xpm[] = {
"4 3 2 1",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"+...",
".++.",
"+.+."};

이와 관련하여:

/* XPM */
static char * hide_active_xpm[] = {
"8 6 2 1",
".  c #EDEDED s active_color_2",
"+  c #313739 s active_text_color_2",
"++......",
"++......",
"..++++..",
"..++++..",
"++..++..",
"++..++.."};

제 질문을 확인해 주셔서 정말 감사드립니다.

메시닉스

답변1

다음 스크립트는 .xpm파일을 입력으로 사용하고 원하는 새 출력을 인쇄합니다.

#!/bin/bash
#enlarge.sh

cat "$1" | while read -r line; 
do 
    if echo "$line" | grep -vP "[[:alnum:]]" 1>/dev/null; 
    then 
        #The following line is applies to all pixel lines except the very last one 
        echo "$line" | sed 's/\(\+\|\.\)/&&/g;p' | grep -vP "\}\;$" || \

            #The following line applies to the last one with "};" characters in the end 
            echo "$line" | sed 's/\(\+\|\.\)/&&/g' | sed 's/\}\;$/,/g' | sed 'p;s/\,$/\}\;/g'
    else
        echo "$line"
    fi; 
done; 

원하는 새 출력이 화면에 인쇄됩니다. 출력을 파일로 인쇄하려면 다음을 수행하십시오.

./enlarge.sh input.xpm > new.xpm

중요한 팁

스크립트는 sed 정규식을 기반으로 합니다. 텍스트가 여러 줄에 걸쳐 분산되어 있는 상황에서는 이는 매우 신뢰할 수 없습니다. 이미지 크기를 두 배로 늘리고 싶다면 그것을 사용하지 않으시겠습니까 mogrify? 사용법은 다음과 같습니다:

 mogrify -scale 200% image.xpm

관련 정보