我在课堂上被分配了一些sed作业,距离完成作业只有一步之遥。我试图想出一个解决方案,但我没有做任何事情,直到我即将放弃。
基本上,在我得到的文件中...我应该替换它:
<b>Some text here...each bold tag has different content...</b>
带
Some text here...each bold tag has different content...
我已经部分完成了,但我无法弄清楚如何使用sed(regexp)“回显”提取的内容。
我设法将内容替换得很好,但是当我试图实际输出HTML标签之间的内容时,它就出错了。
如果这令人困惑,我真的很抱歉。我现在已经在这个项目上工作了几个小时而且有点沮丧。基本上,为什么这不起作用?
s/<b>.*<\/b>/.*/g
我只想输出没有粗体标签的内容。
非常感谢!
答案 0 :(得分:1)
您需要使用捕获组,它们是括号()
所以,就是这样:
s/<b>(.*)<\/b>/\1/g
捕获组从左到右编号,从1开始,然后增加。
此语法是执行正则表达式的标准方法; sed的语法略有不同。 sed命令是
sed 's/<b>\(.*\)<\/b>/\1/g' [file]
或
sed -r 's/<b>(.*)<\/b>/\1/g' [file]
当然,如果您只想删除粗体标签,另一种解决方案就是用空白替换HTML标签
sed 's/<\([^>]\|\(\"[^\"]\"\)\)*>//g' [file]
(我不喜欢sed需要逃避一切)
s/<([^\]|(\"[^\"]\"))*>//g
答案 1 :(得分:1)
如果要在替换中引用正则表达式匹配的一部分,则需要将正则表达式的该部分放入捕获组,然后使用前面带反斜杠的组编号引用它。请尝试以下方法:
s/<b>\(.*\)</b>/\1/g
答案 2 :(得分:-1)
我认为这个问题应该针对SED的问题。像这样:http://www.grymoire.com/Unix/Sed.html#uh-4