我有一个文件,其中包含:
<li><b> Some Text:</b> More Text </li>
我想删除html标签,并将</b>标签替换为破折号,使其变成这样:
</b>
Some Text:- More Text
我试图使用sed,但我找不到合适的正则表达式组合。
csga3l581#
如果你严格地想要剥离所有HTML标签,但同时 * 只 * 用-替换</b>标签,你可以用管道链接两个简单的sed命令:
-
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或新文件:
stripped_file
-e
-i
cat
sed -i -e 's|</b>|-|g' -e 's|<[^>]*>||g' your_file
这将像上面的链式命令一样进行替换,但是这次它将直接替换输入文件中的内容。要保存到新文件,请删除-i并将> stripped_file添加到末尾(或您选择的任何文件名)。
> stripped_file
myzjeezk2#
使用GNU sed的一种方法:
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'
测试结果:
63lcw9qa3#
在BASH中,你也可以使用CLI browser或PHP来解析和清理任何HTML,它们可能比sed更有效(在这种情况下),但是,当然,你必须先安装它们:W3M:
CLI browser
PHP
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
regex
3条答案
按热度按时间csga3l581#
如果你严格地想要剥离所有HTML标签,但同时 * 只 * 用
-
替换</b>
标签,你可以用管道链接两个简单的sed
命令:这将把文件的所有内容传递给第一个
sed
命令,该命令将把</b>
替换为-
。然后,它的输出将通过管道传输到sed
,该sed
将用空字符串替换所有HTML标记。最终输出将保存到新文件stripped_file
中。使用与@Steve的另一个答案类似的方法,您也可以使用
sed
的-e
选项将表达式链接到单个(非管道命令);通过添加-i
,您还可以读入并替换原始文件的内容,而无需cat
或新文件:这将像上面的链式命令一样进行替换,但是这次它将直接替换输入文件中的内容。要保存到新文件,请删除
-i
并将> stripped_file
添加到末尾(或您选择的任何文件名)。myzjeezk2#
使用
GNU sed
的一种方法:范例:
测试结果:
63lcw9qa3#
在BASH中,你也可以使用
CLI browser
或PHP
来解析和清理任何HTML,它们可能比sed
更有效(在这种情况下),但是,当然,你必须先安装它们:W3M:
山猫:
链接:
(Credits here)
PHP:
记住:
CLI browsers
解决方案将HTML渲染成文本,删除任何类型的代码(内联JS和CSS),并尝试按照HTML规则对其进行格式化。PHP
解决方案,通过使用strip_tags,将删除所有HTML标记,并保留所有“非HTML”的东西(空格,制表符,内联CSS和JS代码......)或多或少像大多数sed
/regex
解决方案一样。