Внедрить HTML-код в шаблон в ksh. - PullRequest
0 голосов
/ 29 июля 2011

У меня есть шаблон кода:

<html>
<head>
<title> My page </title>
</head>
<body>
CODEWOULDCOMEHERE
</BODY>
</HTML>

И у меня есть сценарий оболочки (ksh), который должен сгенерировать еще немного кода (который будет помещен в область CODEWOULDCOMEHERE).

Я просто не знаю, как разместить этот код там ... Я попробовал sed, но это не сработало ... Какой самый надежный способ сделать это?

Стоит сказать, что сгенерированный код довольно длинный ...

спасибо!

[EDIT]

Что я пробовал до сих пор:

HTMLCODE=$(genReportStatCellHtml)
HTMLOUT=$(cat report_template.html|sed -e "s/CODEWOULDCOMEHERE/\'$HTMLCODE\'/g")

, что дает: sed: 0602-404 Function s/GENERATEDHTMLCODE/\'a lot of html'/g cannot be parsed.

И

HTMLCODE=$(genReportStatCellHtml)
HTMLOUT=$(cat report_template.html)
    echo ${HTMLOUT/CODEWOULDCOMEHERE/$HTMLCODE}

, что дает: ./test.sh[8]: ${HTMLOUT/CODEWOULDCOMEHERE/$HTMLCODE}: 0403-011 The specified substitution is not valid for this command.

Ответы [ 2 ]

1 голос
/ 29 июля 2011

Простой способ сделать это с помощью здесь документов.Вот как это выглядит при вводе в интерактивном режиме:

$ cat <<EOF
> Some literal content
> You can do parameter expansion:
> $PWD
> as well as command expansion:
> `date`
> 
> EOF
Some literal content
You can do parameter expansion:
/tmp
as well as command expansion:
Fri Jul 29 13:36:10 CDT 2011
$

Или сценарий оболочки, который делает это

#! /bin/sh
cat <<EOF >output.txt
Some literal content
You can do parameter expansion:
$PWD
as well as command expansion:
`date`

EOF

Редактировать: На самом деле не существует хорошего способа использовать внешний файл шаблона сне более чем основные возможности оболочки, но это довольно легко сделать на других языках.Вот Python One Liner, который сделает это.

Нам нужно использовать специальный ключ шаблона для однострочника, поэтому CODEWOULDCOMEHERE заменяется на {0}.

$ cat report_template.html 
<html>
<head>
<title> My page </title>
</head>
<body>
{0}
</BODY>
</HTML>

$ echo "Heres the part that gets inserted" | python -c 'import sys; sys.stdout.write(file(sys.argv[1]).read().format(sys.stdin.read()))' report_template.html 
<html>
<head>
<title> My page </title>
</head>
<body>
Heres the part that gets inserted

</BODY>
</HTML>

Все вместе ваш сценарий будет выглядеть примерно так

subst_template () {
    python -c 'import sys; sys.stdout.write(file(sys.argv[1]).read().format(sys.stdin.read()))' $1
}

genReportStatCellHtml | subst_template report_template.html > report.html
0 голосов
/ 31 декабря 2016
parse_file() 
{ # works just like HEREdoc
    eval echo  "\"$(cat $1 | sed 's+\"+\\"+g'   )\""
}

parse_file templatefile
...