Сценарий оболочки для замены переменной в документе HTML - PullRequest
5 голосов
/ 10 декабря 2011

Я хочу создать статический веб-сайт из сценария оболочки.

Пример кода сценария оболочки:

author="Github INC."
name="Github"
description="social coding"
text=$(awk '{ print }' main.html)

Файл main.html может выглядеть следующим образом:

<!DOCTYPE html> 
<html> 
<head> 
    <title>$name</title> 
</head> 
<body>
......

Я хочу заменить строку $ name в документе html между тегом title на строку $ name в скрипте bash (в этом примере Github), поэтому в этом примере это должно выглядеть следующим образом:

<!DOCTYPE html> 
<html> 
<head> 
    <title>Github</title> 
</head> 
<body>
......

Я мог бы сделать это, изменив код сценария оболочки следующим образом:

author="Github INC."
name="Github"
description="social coding"
text="$( sed "s/<title>.*<\/title>/<title>$name<\/title>" main.html )"

Но если я использую более одной строки в HTML-документе, он больше не будет работать ...

Например:

<!DOCTYPE html> 
<html> 
<head> 
    <title>$name</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <meta name="robots" content="index, follow" /> 
    <meta name="author" content="$author" /> 
    <meta name="description" content="$description" /> 
    <link rel="shortcut icon" href="favicon.png" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body> 

Есть идеи, как связать строки из сценария оболочки с документом HTML?

Ответы [ 5 ]

2 голосов
/ 10 декабря 2011

Использование awk

[jaypal:~/Temp] cat html.sh 
#!/bin/bash
author="Github INC."
name="Github"
description="social coding"
awk '{sub(/\$name/,name);sub(/\$author/,author);sub(/\$description/,description);}1' name="$name" author="$author" description="$description" inputfile

Использование sed

[jaypal:~/Temp] cat html1.sh 
#!/bin/bash
author="Github INC."
name="Github"
description="social coding"
sed -e '/\$name/s//"$name"/' -e '/\$description/s//"$description"/' -e '/\$author/s//"$author"/' inputfile
0 голосов
/ 03 марта 2013

Я создал штпл для этой цели.(Мой очень молодой проект, но, возможно, вы захотите попробовать его, потому что я думаю, что он точно соответствует вашим потребностям)

Чтобы заменить в вашем последнем примере все заполнители, вы можете просто выполнить:

$ name=testname author=testauthor description=mydescription sh -c "$( shtpl example.html.tpl )"

Результат будет:

<!DOCTYPE html> 
<html> 
<head> 
    <title>testname</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <meta name="robots" content="index, follow" /> 
    <meta name="author" content="testauthor" /> 
    <meta name="description" content="mydescription" /> 
    <link rel="shortcut icon" href="favicon.png" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body>

Это так просто.

0 голосов
/ 23 декабря 2011

ВИМ:

:%s/\v"\zs\$\w+\ze"/\={'$author':'Github INC.', '$name':'Github', '$description':'social coding'}[submatch(0)]/g
0 голосов
/ 10 декабря 2011

см. Тест (с awk) ниже: фактически sed также должен работать.

kent$  cat main.html 
<!DOCTYPE html> 
<html> 
<head> 
    <title>$name</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <meta name="robots" content="index, follow" /> 
    <meta name="author" content="$author" /> 
    <meta name="description" content="$description" /> 
    <link rel="shortcut icon" href="favicon.png" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body>


kent$  cat doIt.sh 
#!/bin/bash
author="Github INC."
name="Github"
description="social coding"
awk -vauthor="$author" -vname="$name" -vdesc="$description" '{gsub(/\$name/,name);gsub(/\$author/,author);gsub(/\$description/,desc)}1' main.html

kent$  ./doIt.sh  
<!DOCTYPE html> 
<html> 
<head> 
    <title>Github</title> 
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8" /> 
    <meta name="robots" content="index, follow" /> 
    <meta name="author" content="Github INC." /> 
    <meta name="description" content="social coding" /> 
    <link rel="shortcut icon" href="favicon.png" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
</head> 
<body>
0 голосов
/ 10 декабря 2011

Следующий фрагмент может использоваться для замены $name на Github:

# Example: Replace $name in main.html with Github, output in replaced.html
title=Github
awk '{ gsub("\$name","'$title'")}; print $0 }' main.html > replaced.html

Замененный файл выводится на файл replace.html. Если вы хотите перезаписать существующий файл, используйте:

awk '{ gsub("\$name","'$title'")}; print $0 }' main.html > replaced.html &&
     mv replaced.html test.html
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...