我正在尝试执行以下操作:
我有一个包含html标签的文件,例如"<span class='A'> blah </span>"
,"<span class='B'> blah </span>"
等。
我想用"<span class='A'> blah </span>"
替换** blah **
的所有出现。所以我尝试使用sed。
sed "s/<span class='A'>/*/g" myfile
后跟
sed "s/<\span>/*/g" myfile
这几乎让我得到了我想要的东西,但也弄乱了其他课程的结束范围标签,这是我不想要的。
理想情况下,我想要某种方式来引用
中的[^&lt;] *匹配的文本 sed s/<span class='A'>[^<]*</span>/my_replacement_character/g
。
答案 0 :(得分:2)
您可以使用捕获组和反向引用。在大多数正则表达式中,您可以指定带括号的捕获组,在sed中您需要转义括号,因此您可以将[^<]*
更改为\([^<]*\)
。然后在替换中,您可以使用\1
来引用捕获的内容。
最后,看起来应该是这样的:
sed "s/<span class='A'>\([^<]*\)<\/span>/**\1**/g"
在某些GNU sed(以及可能的其他实现)中,您可以使用-r
或--regexp-extended
标志使sed正则表达式与其他版本更加一致。这样你就不需要逃避括号:
sed -r "s/<span class='A'>([^<]*)<\/span>/**\1**/g"