我想从HTML标签中删除一个特定的属性(在我的例子中是name),它可能在我的文件
的每行的不同位置示例输入:
<img name="something_random_for_each_tag" src="https://websiteurl.com/286.jpg" alt="img">
预期输出:<img src="https://websiteurl.com/286.jpg" alt="img">
我代码:
sed 's/name=".*"//g' <<< '<img name="something_random_for_each_tag" src="https://websiteurl.com/286.jpg" alt="img">'
但它只显示<img >
,我也失去了src属性
指出:
- name属性可以在标签的任何位置(不一定在开头)
- 您可以使用sed、awk、Perl或任何您喜欢的东西,它应该在命令行上工作
您的sed
表达式匹配到行中最后一个"
的文本。一定是
sed 's/ name="[^"]*"//g'
根据您展示的样品,您可以尝试以下操作吗?在GNUawk
中编写和测试。
awk '/^<img/ && match($0,/src.*/){print substr($0,1,4),substr($0,RSTART,RLENGTH)}' Input_file
解决方案2:使用awk
的sub
(代入函数)
awk '/^<img/{sub(/name="[^"]*" /,"")} 1' Input_file
解释:
解决方案1:使用awk
的匹配函数从src到最后一行进行匹配,并打印前4个带有匹配regex值的空格字符
解决方案2:如果行从<img
开始检查条件,则替换name=""
仍然带有NULL并打印当前行。