如何使用bash更改文件的(未知)编号

如何使用bash更改文件的(未知)编号,bash,awk,sed,scripting,Bash,Awk,Sed,Scripting,我有一个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>

我有一个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>
28
58
44
1220
29
57
43
730
30
56
41
736
我知道这些数字都包含在标签“
”和“
”中

这些数字必须全部乘以3

我该怎么办

我想写一个剧本却没有成功


谢谢

awk
sed
可能不是最好的工具,但这可能有效:

awk -F'<B>|</B>' -v OFS= '{$2="<B>"$2*3"</B>"}1' file
<TR><TD ALIGN=center><FONT SIZE="-1"><B>84</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>174</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>132</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>3660</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>87</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>171</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>129</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>2190</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>90</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>168</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>123</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>2208</B></FONT></TD>
awk-F'|'-vofs='{$2=”“$2*3”“}1'文件
84
174
132
3660
87
171
129
2190
90
168
123
2208

awk
sed
可能不是最好的工具,但这可能会起作用:

awk -F'<B>|</B>' -v OFS= '{$2="<B>"$2*3"</B>"}1' file
<TR><TD ALIGN=center><FONT SIZE="-1"><B>84</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>174</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>132</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>3660</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>87</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>171</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>129</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>2190</B></FONT></TD>
<TR><TD ALIGN=center><FONT SIZE="-1"><B>90</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>168</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>123</B></FONT></TD>
<TD ALIGN=right><FONT SIZE="-1"><B>2208</B></FONT></TD>
awk-F'|'-vofs='{$2=”“$2*3”“}1'文件
84
174
132
3660
87
171
129
2190
90
168
123
2208

使用HTML感知工具修改HTML。例如,在中,您可以编写

open :F html file.html ;
for //b
    set . (3 * .) ;
save :F html :b ;

使用HTML感知工具修改HTML。例如,在中,您可以编写

open :F html file.html ;
for //b
    set . (3 * .) ;
save :F html :b ;

到目前为止你试过什么?你最好的尝试是什么?这可以在单个
awk
脚本中完成,但我不擅长
awk
,所以我会这样做:1。使用
sed
提取
[0-9]*
之间的数字,并将其放在行的前面。2.使用
awk
将其乘以3。将只是
awk'{$1*=3}1
。3.用正确的
sed
将数字放回行中。学习正则表达式最简单的方法是。我正在尝试使用
sed
awk
,但我不知道怎么做。我需要修改的数据位于数千条html行中间(我用grep过滤,只保留那些带有
标记的数据),但是我不能替换
数千条html行中间的数据,我建议。使用html专用工具,
xmllint
xmlstarlet
等。到目前为止,您尝试了什么?你最好的尝试是什么?这可以在单个
awk
脚本中完成,但我不擅长
awk
,所以我会这样做:1。使用
sed
提取
[0-9]*
之间的数字,并将其放在行的前面。2.使用
awk
将其乘以3。将只是
awk'{$1*=3}1
。3.用正确的
sed
将数字放回行中。学习正则表达式最简单的方法是。我正在尝试使用
sed
awk
,但我不知道怎么做。我需要修改的数据位于数千条html行中间(我用grep过滤,只保留那些带有
标记的数据),但是我不能替换
数千条html行中间的数据,我建议。使用html专用工具,
xmllint
xmlstarlet
等。谢谢,您认为什么是最好的工具?如何用更新的数据重写文件?如果我用
“>filename”
再写一遍,会得到一个完全交错的文件。是否有可能只重写旧文件中的数字数据?也可以对结果进行四舍五入吗?@Ignazio使用
awk
重新连接数据,然后执行:
awk'my commands'file>tmp&&mv tmp file
一切都是可能的,只是需要更多的时间,谢谢,您认为什么是最好的工具?如何用更新的数据重写文件?如果我用
“>filename”
再写一遍,会得到一个完全交错的文件。是否有可能只重写旧文件中的数字数据?也可以对结果进行四舍五入吗?@Ignazio使用
awk
重新连接数据,然后执行:
awk'my commands'file>tmp&&mv tmp file
一切皆有可能,只需要更多时间,