如何将 sed 的结果回显到 bash 中的文件?

How to echo result of sed to a file in bash?

我正在尝试将 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 }'`" >> ${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>

使用 GNU sed。我从 s/// 切换到 s|||,从正则表达式切换到扩展正则表达式 (-r)。

sed -r 's|^[^,]*, (.*)|<tr><td></td></tr>|' file

输出:

<tr><td>Text 1 | 34%</td></tr>
<tr><td>Text 2 | 86%</td></tr>
<tr><td>Text 3 | 100%</td></tr>

至少,完全放弃sedawk。 运行 他们每行一次是多余的。

ind=1
while [ "$ind" -lt 4 ]
do
     IFS=, read _ x _
     echo "<tr><td>$x</td></tr>"
     ind=$((ind+1))
done < "$TEXT_FILE" >> "$HTML_FILE"

或者只是 awk:

awk -F, 'NR < 4 {print "<tr><td>"  "</td></tr>"}' "$TEXT_FILE" >> "$HTML_FILE"