如何格式化 grep 结果?

如何格式化 grep 结果?

哇,我想不出一个好方法来标题这个问题。基本上我有一个名为“出勤”的文件,其中包含如下数据:

11/06/2014 101.11.001.01 FirstName LastName
11/06/2014 101.11.001.01 FirstName LastName
11/06/2014 101.11.001.01 FirstName LastName
11/06/2014 101.11.001.01 FirstName LastName

基本上是日期、IP 地址、名字和姓氏。以上是“考勤”文件中的格式。我创建了一个带有文本框和提交按钮的 html 页面,用户可以:A.) 输入 FN/LN 并接收该人登录的日期列表,或者 B.) 输入日期并接收列表在该日期登录的用户数。

我得到了我想要的结果,但是浏览器中显示的 grep 结果全部在一行上,如下所示:

11/06/2014 101.11.001.01 FirstName LastName 11/06/2014 101.11.001.01 FirstName LastName 11/06/2014 101.11.001.01 FirstName LastName 11/06/2014 101.11.001.01 FirstName LastName

显然这是次优的。我需要 grep 结果显示在单独的行上。下面是我的 .cgi 文件。 “getvars”只是教授为转换变量类型而编写的脚本。另外,我只是通过 grep 姓氏来走捷径,因为没有人有相同的姓氏:

#!/bin/bash

. ~/bin/getvars

if [ ! -z "$LN" ]; then
cat attendance | grep $LN

elif [ ! -z "$DATE" ]; then
cat attendance | grep $DATE

else echo No Records Found

fi

我已尝试尽可能简洁,对于任何没有意义的内容我深表歉意。我唯一的问题是:如何在不同的行上获取 grep 结果?

答案1

据推测,您的浏览器会将您指向的任何文件解释为 HTML。在 HTML 中,换行符不是\n标签<br>,因此您需要添加它。例如:

#!/usr/bin/env bash

. ~/bin/getvars

if [ ! -z "$LN" ]; then
  grep "$LN" attendance | sed 's/$/<br>/'
elif [ ! -z "$DATE" ]; then
  grep "$DATE" attendance | sed 's/$/<br>/'
else 
   echo No Records Found
fi

在我的 Debian 上,\n如果文件没有.html扩展名(我尝试过没有扩展名和.txt),firefox 会将其解释为换行符,因此这可能是一种解决方法,但我不知道它的可移植性如何。

更好的选择是使其成为正确的 HTML 页面,使用<pre>标签并将所有<和替换>为其 HTML 等效项:

#!/usr/bin/env bash

. ~/bin/getvars

echo "<HTML><BODY><pre>"
if [ ! -z "$LN" ]; then
  grep "$LN" attendance | sed 's/>/\&gt;/g;s/</\&lt;/g;'
elif [ ! -z "$DATE" ]; then
  grep "$DATE" attendance | sed 's/>/\&gt;/g;s/</\&lt;/g;'
else 
   echo No Records Found
fi
echo "</pre></BODY></HTML>

相关内容