我有一个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。
任何建议都会非常感激。
答案 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
谢谢大家的回答!