我想保留标签之间的未知内容,但要匹配所有使用以下标签的标签:
<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语句的第一部分似乎与正确的内容匹配,这主要是我不确定的第二部分。
答案 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解释了为什么在正则表达式中转义括号的原因。