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アドレス、名前、姓です。上記は「出席」ファイルの形式です。ユーザーがA.)FN / LNを入力し、ログインした日付のリストを受け取るか、B.)日付を入力してリストを受け取るためのテキストボックスと送信ボタンを含むhtmlページを作成しました。その日付にログインしたユーザーの数。

目的の結果が得られましたが、ブラウザに表示されるgrepの結果は、次のようにすべて1行に表示されます。

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」は、教授が変数の型を変換するために書いたスクリプトです。また、同じ城を持った人がいないので、城を探すだけでよい近道を選びました。

#!/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はそれを改行文字として解釈するので、これが回避策になるかもしれませんが、移植性がどれくらいになるのかわかりません。

<pre>より良いオプションは、タグを使用し、<すべておよび>そのHTMLエントリを置き換えて適切な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>

おすすめ記事