regex 在bash中删除/替换html标签

lzfw57am  于 12个月前  发布在  其他
关注(0)|答案(3)|浏览(107)

我有一个文件,其中包含:

<li><b> Some Text:</b> More Text </li>

我想删除html标签,并将</b>标签替换为破折号,使其变成这样:

Some Text:- More Text

我试图使用sed,但我找不到合适的正则表达式组合。

csga3l58

csga3l581#

如果你严格地想要剥离所有HTML标签,但同时 * 只 * 用-替换</b>标签,你可以用管道链接两个简单的sed命令:

cat your_file | sed 's|</b>|-|g' | sed 's|<[^>]*>||g' > stripped_file

这将把文件的所有内容传递给第一个sed命令,该命令将把</b>替换为-。然后,它的输出将通过管道传输到sed,该sed将用空字符串替换所有HTML标记。最终输出将保存到新文件stripped_file中。
使用与@Steve的另一个答案类似的方法,您也可以使用sed-e选项将表达式链接到单个(非管道命令);通过添加-i,您还可以读入并替换原始文件的内容,而无需cat或新文件:

sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file

这将像上面的链式命令一样进行替换,但是这次它将直接替换输入文件中的内容。要保存到新文件,请删除-i并将> stripped_file添加到末尾(或您选择的任何文件名)。

myzjeezk

myzjeezk2#

使用GNU sed的一种方法:

sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g' file.txt

范例:

echo "<li><b> Some Text:</b> More Text </li>" | sed -e 's/<\/b>/-/g' -e 's/<[^>]*>//g'

测试结果:

Some Text:- More Text
63lcw9qa

63lcw9qa3#

在BASH中,你也可以使用CLI browserPHP来解析和清理任何HTML,它们可能比sed更有效(在这种情况下),但是,当然,你必须先安装它们:
W3M:

echo '<li><b> Some Text:</b> More Text </li>' | w3m -dump -T text/html

山猫:

echo '<li><b> Some Text:</b> More Text </li>' | lynx --dump

链接:

echo '<li><b> Some Text:</b> More Text </li>' | links -dump

Credits here
PHP:

echo '<li>My html</li>' | php -r 'echo strip_tags(file_get_contents("php://stdin"));'

记住:

  • CLI browsers解决方案将HTML渲染成文本,删除任何类型的代码(内联JS和CSS),并尝试按照HTML规则对其进行格式化。
  • PHP解决方案,通过使用strip_tags,将删除所有HTML标记,并保留所有“非HTML”的东西(空格,制表符,内联CSS和JS代码......)或多或少像大多数sed/regex解决方案一样。

相关问题