使用sed-如何在两个HTML标记或样式之间用未知内容替换?

时间:2018-10-29 19:47:08

标签: linux bash awk sed

我想保留标签之间的未知内容,但要匹配所有使用以下标签的标签:

<div class="section1-title">arbitrary content here</div>

,并将周围的标签替换为:

<h2>arbitrary content here</h2>

我想出了以下内容,但是显然它没有像在第二部分中那样工作,它实际上是在找到的每个匹配项中都用“]。* [<] / h2 [>]”代替。

sed -i 's/[<]div class=\"section1-title\"[>].*[<]\/div[>]/<h2[>].*[<]\/h2[>]/g'

我想特别知道如何保留中间内容,无论其中有什么内容,并只匹配周围的标签,因为显然有很多元素,所以我不能单独搜索和替换他们。就我所知,sed语句的第一部分似乎与正确的内容匹配,这主要是我不确定的第二部分。

1 个答案:

答案 0 :(得分:2)

您需要的是backref。

    bash-3.2$ sed 's/<div class=\"section1-title\">\(.*\) 
    <\/div>/<h2>\1<\/h2>/g' <<< '<div class="section1-title">arbitrary 
    content here</div>'
    <h2>arbitrary content here</h2>

您的内容周围的括号-\(.*\)-允许以后像\1一样引用它。

请参阅:https://www.regular-expressions.info/backref.html

.bash_profile sed: \1 not defined in the RE解释了为什么在正则表达式中转义括号的原因。