【发布时间】:2019-02-18 07:23:25
【问题描述】:
我正在尝试将 sed 命令的结果回显到不同的 .html 文件。 sed 命令是逐行读取 .txt 文件,只取第二个用逗号分隔的值。
这是我所拥有的:
ind=1
while [ $ind -lt 4 ]
do
echo "<tr><td>" >> ${HTML_FILE}
echo "`sed -n '$ind p' ${TEXT_FILE} | awk -F ',' '{print $2}'`" >> ${HTML_FILE}
echo "</td></tr>" >> ${HTML_FILE}
ind=$((ind+1))
done
${TEXT_FILE} 的内容:
709A8, Text 1 | 34%
354Y7, Text 2 | 86%
F1065, Text 3 | 100%
当我运行我的代码时,这是我的输出。出于某种原因,它会打印“nd p”:
<tr><td>
nd p
</td></tr>
<tr><td>
nd p
</td></tr>
<tr><td>
nd p
</td></tr>
预期的输出应该是这样的:
<tr><td>Text 1 | 34%</td></tr>
<tr><td>Text 2 | 86%</td></tr>
<tr><td>Text 3 | 100%</td></tr>
【问题讨论】:
-
不要使用
echo "`cmd`",而是使用cmd。在sed -n '$ind p'$ind 不会被其内容替换,使用sed -n $ind' p' -
您仍然需要(或至少应该)用双引号引用
$ind以防止分词和路径名扩展。 -
@chepner:很好,我把引号去掉了,因为这是保存它的罕见情况之一(
ind=1和ind=$((ind+1)))。但你是对的,无论如何添加引号是一个好习惯。 -
我推荐使用xmlstarlet来生成HTML/XML。
-
感谢您的 cmets。我实际上才刚刚开始学习 shell 脚本。事实上,我今天才学会了如何使用 sed 和 awk!哈哈,不过真的谢谢你们,你们说的我都会注意的。 :)