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

我必须在多个(>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" title="Read 
 out with ReadSpeaker" href="//app-eu.readspeaker.com/cgi-bin
 /rsent?customerid=5&lang=nl_nl&amp;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
    更改文件
  • e、 g


    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