Как отформатировать результаты 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» – это просто сценарий, сделанный профессором для преобразования типов переменных. Кроме того, я сокращаю углы только с фамилией grepping, потому что у кого-то нет такой же фамилии:

 #!/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 на отдельных строках?

Предположительно, ваш браузер интерпретирует любой файл, на который вы указываете его как HTML. В HTML новая строка не \n а тег, поэтому вам нужно добавить это. Например:

 #!/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 firefox интерпретирует \n как разрывы строк, если в файле нет расширения .html (я пробовал без расширения и .txt ), так что это может быть обходным путем, но я понятия не имею, насколько портативным это будет.

Лучшей альтернативой было бы сделать его надлежащей 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>