如何用Shell脚本替换html文件中的多行文本?

时间:2019-04-01 17:45:01

标签: html bash css3 shell

我有一个html文件,我想在其中使用功能sed使用shell脚本替换样式。 我要替换:

    pre {
      font-size: inherit;
      line-height: inherit;
    }

具有:

    pre {
      font-size: 18px;
      /*line-height: inherit;*/
    }

我尝试了以下操作:

    sed -i 's/pre {\n   font-size: inherit;\n   line-height: 
    inherit;\n}/pre {\n font-size: 18px;\n  \/\*line-height: 
    inherit;\*\/\n}/g' /path/file.html

可以正常运行,但不会替换文本。 请注意,我包括用于微调文本模式的选项卡。 我正在研究ubuntu 18。

任何建议都会非常感激。

3 个答案:

答案 0 :(得分:0)

您可以在sed中使用匹配的模式引用,例如:

sed -i 's/line-height: inherit;/\/*&*\//g' /path/file.html

  • 在这里,我们使用line-height: inherit;来匹配搜索模式。您也可以将其扩展为正则表达式

  • &用于引用匹配的文本,我们将\/**\/用作封闭字符

答案 1 :(得分:0)

sed -Ei '
  /^\s*pre\s*\{\s*$/,/^\s*}\s*$/ {
     /^\s*line-height:\s*inherit\s*;\s*$/ s#^(.*)$#/*&*/#;
  }
' /path/file.html

第一对模式建立了一个范围,在该范围内将执行curl内的代码块-从pre {}

在代码块内部,该模式确定将通过替换来编辑哪些行,因此该模式仅注释line-height指令。

匹配时,它将注释整行(保留空白)。

P.S。 -
      不要使用-iE,这样会失败。
      -Ei作品。 ;)

PH

答案 2 :(得分:0)

根据@PaulHodges回答,这非常有效:

    sed -Ei '/^\s*pre\s*\{\s*$/,/^\s*}\s*$/ {/^\s*font-size:\s*inherit\s*;\s*$/ s#^(.*)$#    
    font-size: 18px;#; /^\s*line-height:\s*inherit\s*;\s*$/ s#^(.*)$#/*&*/#;}' /path/file.html

谢谢大家的回答!