如何使用标准 unix 命令将后缀附加到 HTML 文件中的 id?
Posted
技术标签:
【中文标题】如何使用标准 unix 命令将后缀附加到 HTML 文件中的 id?【英文标题】:How do I append a suffix to ids in a HTML file using standard unix commands? 【发布时间】:2021-12-29 11:00:13 【问题描述】:假设我有一个这样的 html 文件:
<body>
<div id="a">
content of div a
<div id="b"> content of div b </div>
<div id="c"> content of div c </div>
</div>
<style>
#a color: red;
#b color: green;
#c color: blue;
</style>
</body>
我想为所有 id 附加一个唯一的后缀(例如,-suffix
),其中包括属性id="..."
和选择器#...
,并生成如下文件:
<body>
<div id="a-suffix">
content of div a
<div id="b-suffix"> content of div b </div>
<div id="c-suffix"> content of div c </div>
</div>
<style>
#a-suffix color: red;
#b-suffix color: green;
#c-suffix color: blue;
</style>
</body>
如何使用标准的 unix shell 工具(如 sed
、grep
、awk
)以涵盖尽可能多的情况的方式完成此任务?
我的尝试:
我想出了以下sed
命令:
sed -e 's/id="\([-_a-zA-Z0-9]*\)"/id="\1-suffix"/g;s/#\([-_a-zA-Z0-9]*\)/#\1-suffix/g' index.html
实际上是两个命令合二为一:
s/id="\([-_a-zA-Z0-9]*\)"/id="\1-suffix"/g
- 替换 id 属性 id="..."
s/#\(\[-_a-zA-Z0-9]*\)/#\1-suffix/g
- 替换 id 选择器 #...
然而它远非完美。首先,它只支持双引号 id="..."
中的双属性值,并且 id 值受到限制,因为它们必须匹配 [-_a-zA-Z0-9]*
。其次,这与十六进制颜色冲突,所以像#ffffff
这样的白色会得到一个后缀#ffffff-suffix
;像 #...
这样的 id 选择器应该只在存在适当的属性 id="..."
时才获得后缀。
最好的方法是什么?
【问题讨论】:
我建议使用xmlstarlet。 为避免与十六进制颜色发生冲突,您可以尝试匹配行首、一些空格,然后是 id。s/^[ \t]*#\([-_a-zA-Z0-9]*\)/#\1-suffix/g
。 (注意:我没有测试过这个正则表达式。)
【参考方案1】:
您的文件中有很多案例,正如您提到的颜色问题 我的方法是使用
逐行处理文件cat inputfile.html | while read a; do
some code
echo "$a" >> outputfile.html
done
话虽如此,你可以使用
b=$(expr "$a" : "regex")
要精确过滤您要修改的内容,然后再使用一些
sed
在 $b 上得到你想要的并将 $b 推入 $a
【讨论】:
以上是关于如何使用标准 unix 命令将后缀附加到 HTML 文件中的 id?的主要内容,如果未能解决你的问题,请参考以下文章