-1

我怎样才能用 sed 删除所说的 html 标签?

例子:

<div id="header"><span id="navbar">... Content ...</span></div>

我尝试了什么:

sed 's!<div id=\"header\">.*\?</div>!!g'

请记住,这应该根据这个正则表达式参考工作

4

4 回答 4

2

这可能对您有用:

sed '
>    /<div id="header"><span id="navbar">/{ # search for start tags
>    s//\n/                                 # replace start tags with newline
>    :a                                     # label a
>    /\n<\/span><\/div>/bb                  # search for end tags and if so goto label b
>    s/\n./\n/                              # end tags not found bump along a character
>    ta                                     # goto label a if last substitution ok
>    :b                                     # label b
>    s///                                   # delete end tags and newline
>    /^$/d                                  # check for empty line and if so delete
>    }' file

注意 这期望开始/结束标签在同一行。

于 2012-04-23T14:53:43.447 回答
0

sed不支持.*?(贪婪匹配)。
你可以试试ssed(super sed)

于 2012-04-23T11:34:39.280 回答
0

如果您的目标是从文件中删除 html 标记及其内容,您可以尝试以下命令。

注意:以下所有命令都是内联编辑。您要更改的文件将在运行此命令后立即更改。测试前请备份您的文件。

如果标签都在一行上,您可以尝试以下操作。

sed -i 's/<div id=\"header\"><span id=\"navbar\".*<\/span><\/div>//g' /yourfile

如果标签位于多行,如下例所示,请尝试以下命令。

<div id="header"><span id="navbar">
    ... Content ...
</span></div>

sed -i '/<div id=\"header\"><span id=\"navbar\">/,/<\/span><\/div>/g' /yourfile

注意:如果您在 OS X 上工作,您需要将 (sed -i) 更改为 (sed -i '')

于 2012-04-23T20:12:42.633 回答
0

使用 sed 将是:

testers="<div id="header"><span id=\"navbar\">... Content ...</span> some stuf </div>"
echo $testers| sed -E 's/<[\w ="/]+>// g'

ssed而不是sed巫婆手段(super sed)解决,您可以在任何POSIX系统中非常容易地安装它,所以我开始了。

testers="<div id="header"><span id=\"navbar\">... Content ...</span> some stuf </div>"
echo $testers| ssed -R -e 's/<[\w ="/]+>// g'

结果是。

... Content ... some more stuf

干杯。

于 2012-06-25T06:17:12.467 回答