Bash 用包含符号的变量替换单行的最佳方法
我必须在多个(>200)html文件中插入一个文本块。我决定用bash来处理这个任务 必须插入的文本块是多行程序:Bash 用包含符号的变量替换单行的最佳方法,bash,Bash,我必须在多个(>200)html文件中插入一个文本块。我决定用bash来处理这个任务 必须插入的文本块是多行程序: textblockvar=' <body class="article toc2 toc-right"> <div id="readspeaker-button1" class="rs_skip rsbtn rs_preserve"> <a rel="nofollow" class="rsbtn_play" accesskey="L" titl
textblockvar='
<body class="article toc2 toc-right">
<div id="readspeaker-button1" class="rs_skip rsbtn rs_preserve">
<a rel="nofollow" class="rsbtn_play" accesskey="L" title="Read
out with ReadSpeaker" href="//app-eu.readspeaker.com/cgi-bin
/rsent?customerid=5&lang=nl_nl&voice=Ilse&re$
<span class="rsbtn_left rsimg rspart"><span
class="rsbtn_text"><span>Lees voor</span></span></span>
<span class="rsbtn_right rsimg rsplay rspart"></span>
</a>
</div>
'
但是,脚本总是以一个致命错误结束:“unterminated`s'命令”
我尝试交换引号,尝试不使用引号,但错误仍然存在
也许我的解决方案不是最好的选择。有什么解决办法吗?这里有一种可能有效的方法:
“
引用您的sed
命令,而不是”
\n
替换字符串变量中的换行符…id=5\&lang=nl\u nl\&;voice=Ilse\&re…
sed-i
更改文件textblockvar='\n不要用正则表达式解析HTML!使用HTML解析器,而不是在bash中执行此任务,还是使用外部脚本工具(如sed或awk)执行此任务?(同样,如此人所说!)@ghoti我使用bash脚本来完成此任务。在我使用sed进行html替换的脚本中,我怀疑您的问题在于使用了双引号(“
)。这个字符对shell有特殊的含义。然后,sed
命令的参数实际上与预期的非常不同。使用反斜杠来转义双引号。kzpm,好的,那么,如果你的问题是“我如何以错误的方式解决这个问题”,我将继续下一个问题。祝你好运!:-)
FILES=leerstof/*/*.html
for f in $FILES
do
sed -e "s|'<body class="article toc2 toc-right"'|${textblockvar}|g" $f
done
textblockvar='<body class="article toc2 toc-right">\n<div id...'
...
sed -i 's|<body class="article toc2 toc-right"|'$textblockvar'|g' $f