想要grep文件并将行像分离的vars一样导出,将最后两行导出为一个var。 之后创建循环并导出html标记中的变量。
档案视图:
1.1.1.1 host red 70% /
1.1.1.1 host green 0% /dev/shm
1.1.1.1 host green 63% /staging/om_campaign_files
1.1.1.1 host red 71% /mnt/OBCDir
导出变量后的预期视图:
<tr><td>1.1.1.1<td/><td>host<td/><td color=red>/mnt/OBCDir<td/></tr>
答案 0 :(得分:3)
如果您正在寻找程序中可用的内容,而不是在命令提示符下使用单行内容:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
while (my $line = <DATA>) {
chomp $line;
my ($ip, $hostname, $color, undef, $mount) = split ' ', $line;
say "<tr><td>$ip</td><td>$hostname</td><td color=$color>$mount</td></tr>";
}
__DATA__
1.1.1.1 host red 70% /
1.1.1.1 host green 0% /dev/shm
1.1.1.1 host green 63% /staging/om_campaign_files
1.1.1.1 host red 71% /mnt/OBCDir
输出:
<tr><td>1.1.1.1</td><td>host</td><td color=red>/</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/dev/shm</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/staging/om_campaign_files</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=red>/mnt/OBCDir</td></tr>
答案 1 :(得分:1)
使用awk
只需根据需要插入每个字段:
awk '{print "<tr><td>"$1"</td><td>"$2"</td><td color="$3">"$5"</td></tr>"}' file
<tr><td>1.1.1.1</td><td>host</td><td color=red>/</td></tr>
<tr><td>1.1.1.1</td><td>host</td><td color=green>/dev/shm</td></tr>
...
注意:还修复了一些结束标记,即<td/>
到</td>
。
答案 2 :(得分:1)
perl -anE 'say "<tr><td>$F[0]<td/><td>$F[1]<td/><td color=$F[2]>$F[4]<td/></tr>"' file
答案 3 :(得分:1)
纯bash
解决方案。我假设输出是由一些外部实用程序生成的。此外部实用程序由cat infile
模拟(请参阅coproc
)。除了调用外部实用程序之外,没有额外的分支。
coproc cat infile
while read -u ${COPROC[0]} i j k l m; do
echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done
该程序在后台启动proc。其stdout
被重定向到存储在$ {COPROC [0]}中的文件句柄。这个句柄在while循环中读取。
或没有coproc
(请注意<
和<(
之间的空格!):
while read i j k l m; do
echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done < <(cat infile)
如果输入在文件中,则可以像
一样使用while read i j k l m; do
echo "<tr><td>$i<td/><td>$j<td/><td color=$k>$m</td></tr>"
done <infile