왜 그렇게하는지 모르겠지만 여기에 두 개의 템플릿이 있습니다. 하나는 '데이터베이스'이고 다른 하나는 실제 템플릿입니다. 둘 다 shtpl 로 처리하기 쉽습니다 . (나의 개인 프로젝트이므로 널리 사용되지는 않지만 실제로 이러한 종류의 문제를 해결하기 위해 개발되었습니다)
shtpl을 사용하면 다음과 같이 할 수 있습니다.
'configuration'파일의 내용 :
template_main=main.txt
template_other=other.txt
text1=whatever
text2=blah
'데이터베이스'파일의 내용 (구분자가 탭 (\ t)이라고 가정했습니다) :
#% . "$CONFFile"
#% if [ -z "$template_main" ] || [ -z "$template_other" ] || \
#% [ -z "$text1" ] || [ -z "$text2" ]; then
#% printf "database could not be generated!\n" > /dev/stderr
#% exit 1
#% fi
#%# outputfile template data1 data2 data3
first.txt $template_main $text1 abcd 1234
second.txt $template_main $text2 efgh 5678
third.txt $template_other $text1 ij 90
generatetemplates.sh의 내용 :
#!/bin/bash
if [ ! -s "$CONFFile" ]; then
if [ ! -s "$1" ]; then
printf "CONFfile is not set or empty!\n"
exit 1
else
export CONFFile="$1"
fi
fi
DB="$( bash -c "$( shtpl database )" )"
if [ -z "$DB" ]; then
printf "Database is empty! Abort.\n"
exit 2
fi
IFS=$'\t'
printf "%s" "$DB" | while read "Out" "In" "data1" "data2" "data3"; do
data1="$data1" data2="$data2" data3="$data3" \
bash -c "$( shtpl "$In" )" > "$Out"
done
main.txt의 내용 (other.txt는 상당히 동일 함) :
main.txt template
$data1
$data2
$data3
따라서 generatetemplates.sh를 실행하십시오.
$ bash generatetemplates.sh "./configuration"
first.txt, second.txt 및 third.txt를 생성합니다.
$ cat first.txt | $ cat second.txt | $ cat third.txt
main.txt template | main.txt template | other.txt template
whatever | blah | whatever
abcd | efgh | ij
1234 | 5678 | 90
작은 설명 : generatetemplates.sh에서 먼저 구성 파일에서 생성 된 필요한 '데이터베이스'입니다. 그리고 두 번째로 데이터베이스의 모든 tupel에 대해 마침내 템플릿에서 해당 Out-file을 가져옵니다.
참고 : 빈 데이터 [123] 읽기에 문제가 있습니다. 따라서이 방법으로는 불가능합니다.
따라서 이것이 귀하의 요구에 충분히 간단하기를 바랍니다.
즐기세요!