在单个文件的循环中使用sed

时间:2014-01-02 21:20:43

标签: unix sed sh

我要求对html文件进行58次更改。 for循环运行29次

它包含以下sed命令。 for循环的每次运行都取代了58个中的2个占位符

sed "s?$Plc_hldr1?$DateTime?;s?$Plc_hldr2?$Total?" html_format.htm >> html_final.htm

我正在使用上面的命令,它在每个循环上对原始文件进行更改并将其附加到html_final.htm文件中。

因此html_final.htm中有29份html_format.htm。

我只需要复制一份html_format.htm,并替换所有58个占位符值。

下面是整个表格的一个小例子:

01/02/2014      15
%%DDMS2RT%%     %%DDMS2C%%
%%DDMS3RT%%     %%DDMS3C%%
%%DDMS4RT%%     %%DDMS4C%%
%%DDMS5RT%%     %%DDMS5C%%
%%DDMS6RT%%     %%DDMS6C%%
%%DDMS7RT%%     %%DDMS7C%%

在下面的第二个for循环之后是html_final.htm的内容

01/02/2014      15
%%DDMS2RT%%     %%DDMS2C%%
%%DDMS3RT%%     %%DDMS3C%%
%%DDMS4RT%%     %%DDMS4C%%
%%DDMS5RT%%     %%DDMS5C%%
%%DDMS6RT%%     %%DDMS6C%%
%%DDMS7RT%%     %%DDMS7C%%

%%DDMS1RT%%     %%DDMS1C%%
01/02/2014      817
%%DDMS3RT%%     %%DDMS3C%%
%%DDMS4RT%%     %%DDMS4C%%
%%DDMS5RT%%     %%DDMS5C%%
%%DDMS6RT%%     %%DDMS6C%%
%%DDMS7RT%%     %%DDMS7C%%

请注意,在第二个for循环之后再次附加相同的表,第二行中的占位符包含值,第一行中的值再次被占位符替换。

我想要的是以下输出。即1张单人桌而不是多张副本,并且所有占位符都在该表内自行替换

01/02/2014      15
01/02/2014      817
01/02/2014      512
01/02/2014      765
%%DDMS5RT%%     %%DDMS5C%%
%%DDMS6RT%%     %%DDMS6C%%
%%DDMS7RT%%     %%DDMS7C%%

我尝试使用sed -i但它在AIX unix中不可用。

我真的希望我已经解释过非常清楚地表达了这个问题,我的问题不再是XY问题!!

2 个答案:

答案 0 :(得分:0)

最快的解决方案肯定是使用>而不是>>

>>用于将标准输出连接到指定文件。

>用于将标准输出的输出写入指定文件,替换旧文件(如果已存在)。

sed "s?$Plc_hldr1?$DateTime?;s?$Plc_hldr2?$Total?" html_format.htm > html_final.htm
cp html_final.htm html_format.htm

答案 1 :(得分:0)

如果我们想象你真正的问题陈述是“我如何从我从数据库中检索的片段拼凑出一个HTML表格”,那么答案可能就像这样。

#!/bin/sh

# Output HTML header

cat <<'____HERE'
<html><head><title>Table</title></head>
  <body><table>
    <tr><th>Date</th><th>Result</th></tr>
____HERE

# Obtain results from database
sql 'select date, result from table;'  |

# Read each record, format an HTML table fragment
while read date result; do
    cat <<________HERE
        <tr><td>$date</td><td>$result</td></tr>
________HERE
done

# Output HTML footer
cat <<____HERE
</table></body></html>
____HERE

脚本在其标准输出上打印HTML页面。如果您希望将其存储在文件中,请重定向到文件。

(对不起,如果我的HTML技能生锈了。已经有一段时间......)