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

问题描述 投票:1回答:3

我试图将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>
bash unix awk sed echo
3个回答
4
投票

或者只是awk:

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

2
投票

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

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

输出:

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

1
投票

至少,完全抛弃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"
© www.soinside.com 2019 - 2024. All rights reserved.