3

我有这个:

#!/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这里执行命令?

4

3 回答 3

3

我认为您可以通过一次调用来做到这一点cat,使用命令替换在中间插入自述文件:

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)"
于 2012-08-20T02:27:29.623 回答
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
于 2012-08-20T01:20:50.400 回答
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
于 2012-08-20T06:15:45.513 回答