Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 2 Sep 2006 13:12:48 +1000
From:      Peter Jeremy <peterjeremy@optushome.com.au>
To:        Lucas James <Lucas.James@ldjcs.com.au>
Cc:        freebsd-current@freebsd.org
Subject:   Re: suggested addition to 'date'
Message-ID:  <20060902031247.GE749@turion.vk2pj.dyndns.org>
In-Reply-To: <200609020956.54008.Lucas.James@ldjcs.com.au>
References:  <200608281545.k7SFjn6l063922@lurza.secnetix.de> <p06230928c11e2298ca97@[128.113.24.47]> <200609020956.54008.Lucas.James@ldjcs.com.au>

next in thread | previous in thread | raw e-mail | index | archive | help

--DO5DiztRLs659m5i
Content-Type: multipart/mixed; boundary="fWddYNRDgTk9wQGZ"
Content-Disposition: inline


--fWddYNRDgTk9wQGZ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Sat, 2006-Sep-02 09:56:53 +1000, Lucas James wrote:
>On Saturday 02 September 2006 03:53, Garance A Drosehn wrote:>
>> mode.  Not ever.  Date is a command to set or display dates.
>> It is not a command to filter files.  'cat' would be a more
> appropriate place to add this option.

I tend to agree.

>or add an option to cat to prepend each line with an arbitrary string ala:
>
>cat -p `date` file

Firstly, we already have this:
	sed "s=3D^=3D$(date)=3D" file

And secondly, this pre-pends a fixed string.  What's wanted is a filter
to prepend a time/date stamp (which varies) to the input stream.

The justification for extending date(1) is that it already has the code
to handle date/time stamps.  In reality, this code is all in strftime(3)
and cat(1) already has hooks to insert a string at the beginning of a
line so I believe that the attached patch is more appropriate.  (Man
page update on request).

--=20
Peter Jeremy

--fWddYNRDgTk9wQGZ
Content-Type: text/plain; charset=us-ascii
Content-Disposition: attachment; filename="cat.diff"
Content-Transfer-Encoding: quoted-printable

Index: cat.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
RCS file: /usr/ncvs/src/bin/cat/cat.c,v
retrieving revision 1.32
diff -u -r1.32 cat.c
--- cat.c	10 Jan 2005 08:39:20 -0000	1.32
+++ cat.c	2 Sep 2006 03:08:58 -0000
@@ -67,6 +67,7 @@
 int bflag, eflag, nflag, sflag, tflag, vflag;
 int rval;
 const char *filename;
+const char *datefmt;
=20
 static void usage(void);
 static void scanfiles(char *argv[], int cooked);
@@ -84,7 +85,7 @@
=20
 	setlocale(LC_CTYPE, "");
=20
-	while ((ch =3D getopt(argc, argv, "benstuv")) !=3D -1)
+	while ((ch =3D getopt(argc, argv, "benp:stuv")) !=3D -1)
 		switch (ch) {
 		case 'b':
 			bflag =3D nflag =3D 1;	/* -b implies -n */
@@ -95,6 +96,8 @@
 		case 'n':
 			nflag =3D 1;
 			break;
+		case 'p':
+			datefmt =3D optarg;
 		case 's':
 			sflag =3D 1;
 			break;
@@ -177,6 +180,8 @@
 cook_cat(FILE *fp)
 {
 	int ch, gobble, line, prev;
+	char datebuf[1024];
+	time_t now;
=20
 	/* Reset EOF condition on stdin. */
 	if (fp =3D=3D stdin && feof(stdin))
@@ -198,6 +203,14 @@
 				if (ferror(stdout))
 					break;
 			}
+			if (datefmt !=3D NULL) {
+				time(&now);
+				strftime(datebuf, sizeof(datebuf), datefmt,
+					 localtime(&now));
+				(void)fputs(datebuf, stdout);
+				if (ferror(stdout))
+					break;
+			}
 		}
 		if (ch =3D=3D '\n') {
 			if (eflag && putchar('$') =3D=3D EOF)

--fWddYNRDgTk9wQGZ--

--DO5DiztRLs659m5i
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (FreeBSD)

iD8DBQFE+Pav/opHv/APuIcRAgx+AJ9UYNtTRokP1HApqU/yDDC8qvdQwwCgkXmu
g4VSbq595reHFR8FnQssMaM=
=8JLy
-----END PGP SIGNATURE-----

--DO5DiztRLs659m5i--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20060902031247.GE749>