Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Shell script to replace a variable in a HTML document

I want to generate a static website from a shell script.

A example for the shell script code is:

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

The main.html could look like this:

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

I want to replace the $name string in the html document between the title tag with the $name string in the bash script (in this example Github) so in this example it should look like this:

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

I could do this by changing the shell script Code to this:

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

But if I use more then one string in the html document, then it won't work anymore...

For example:

<!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> 

Any ideas how to connect the strings from the Shell Script with the HTML Document?

like image 316
Micheal Meyer Avatar asked Dec 09 '11 21:12

Micheal Meyer


3 Answers

Using 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

Using 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
like image 165
jaypal singh Avatar answered Oct 14 '22 08:10

jaypal singh


see the test (with awk) below: actually sed should work as well.

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>
like image 37
Kent Avatar answered Oct 14 '22 06:10

Kent


vim:

:%s/\v"\zs\$\w+\ze"/\={'$author':'Github INC.', '$name':'Github', '$description':'social coding'}[submatch(0)]/g
like image 24
kev Avatar answered Oct 14 '22 08:10

kev