我有这个:
#!/bin/bash
# Open up the document
read -d '' html <<- EOF
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
EOF
#Overwrite the old file with a new one
echo "$html" > index.html
# Convert markdown to HTML
`cat README.md | marked --gfm >> index.html`
# Put the converted markdown into the HTML
read -d '' html <<- EOF
</body>
</html>
EOF
# Save the file
echo "$html" >> index.html
但是我想要的只是一次写入基本上,在第一个EOF
我也有</html></body>
,而在<body>
标签之间我会有例如,{{CONTENT}}
替换为cat README.md | marked --gfm
,如:
read -d '' html <<- EOF
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
{{CONTENT}}
</body>
</html>
EOF
我一遍又一遍地使用sed
命令,但我认为我做错了什么,当我要搜索的文件内容中有斜线时,我会发现存在问题。我怎么能在这里实现sed
命令?
答案 0 :(得分:3)
我认为你可以通过一次调用cat
来执行此操作,使用命令替换将read-me插入中间:
cat << EOF > index.html
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
$(marked --gfm < README.md)
</body>
</html>
EOF
另一种选择可能是使用printf
,用简单的格式字符串替换{{CONTENT}}占位符。
read -d '' -r template <<EOF
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
%s
</body>
</html>
EOF
printf "$template" "$(marked --gfm < README.md)"
答案 1 :(得分:1)
你不会。
md="$(marked --gfm <README.md)"
> index.html
while read html
do
echo "${html/{{CONTENT}}/$md}" >> index.html
done <<- EOF
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
{{CONTENT}}
</body>
</html>
EOF
答案 2 :(得分:0)
这可能适合你(GNU sed):
sed '/<body>/!b;n;s/.*/&/e' - <<\EOF > index.html
<!DOCTYPE html>
<html>
<head>
<title>...</title>
<meta name="...">
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body>
marked --gfm < README.md
</body>
</html>
EOF