【发布时间】:2020-03-01 16:22:17
【问题描述】:
我有一个 html 文件,我应该(使用 Bash)更改里面的数字。 这是一个例子:
<TR><TD ALIGN=center><FONT SIZE="-1"><B>28</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>58</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>44</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>1220</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>29</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>57</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>43</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>730</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>30</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>56</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>41</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>736</B></FONT></TD>
我知道数字都包含在标签“<B>”和“</B>”中。
这些数字都必须乘以 3。
我该怎么办?
我正在尝试编写脚本但没有成功。
谢谢
【问题讨论】:
-
到目前为止您尝试过什么?你最好的尝试是什么?
-
这可以在单个
awk脚本中完成,但我不擅长awk,所以我会这样做: 1. 使用sed提取<B>[0-9]*</B>和把它放在线的前面。 2. 用awk将它乘以 3。就是awk '{ $1*=3 }1。 3. 将号码放回与正确sed对应的行中。 Here is a sed introduction,学习正则表达式最简单的方法是to play games like crosswords with it。 -
我正在尝试使用
sed和awk,但我不知道该怎么做。我需要修改的数据位于数千个 html 行中(我用 grep 过滤,只保留那些具有<B>标签的数据),但我无法进行替换 -
the midst of thousands of html lines- 然后我建议not to parse html with regex。使用 html 的专用工具,xmllint、xmlstarlet等。