Como formatar os resultados do grep?

3

Nossa, eu não consegui pensar em uma boa maneira de intitular essa questão. Basicamente eu tenho um arquivo chamado "atendimento" com dados como este:

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

Basicamente, é a data, o endereço IP, o nome e o sobrenome. O acima é como é formatado no arquivo "atendimento". Eu criei uma página html com caixas de texto e um botão de envio, onde um usuário pode: A.) Digite um FN / LN e receber uma lista de datas que pessoa logada, OU B.) Digite uma data e receber uma lista de usuários que efetuaram login nessa data.

Estou obtendo os resultados que quero, mas o resultado do grep exibido no navegador é todo em uma linha, assim:

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

Obviamente, isso é sub-ótimo. Preciso que os resultados do grep apareçam em linhas separadas. Abaixo está o meu arquivo .cgi. "getvars" é apenas um script que o professor fez para converter tipos de variáveis. Além disso, estou cortando cantos apenas pelo sobrenome do grepping, porque ninguém tem o mesmo sobrenome:

#!/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

Eu tentei ser o mais conciso possível e peço desculpas por qualquer coisa que não faça sentido. Minha única pergunta é: Como obtenho os resultados do grep em linhas separadas?

    
por Shane 07.11.2014 / 01:27

1 resposta

2

Presumivelmente, o seu navegador está interpretando o arquivo para o qual você está apontando como HTML. Em HTML, uma nova linha não é \n , mas a tag <br> , então você precisa adicionar isso. Por exemplo:

#!/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

No meu Debian, o firefox interpreta \n como quebras de linha se o arquivo não tem extensão .html (eu tentei sem extensão e .txt ), então isso pode ser uma solução alternativa, mas não tenho idéia de como seria portável estar.

Uma alternativa melhor seria torná-la uma página HTML adequada, usar <pre> tags e substituir todos os < e > por seus equivalentes em 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>
    
por 07.11.2014 / 02:03

Tags