Index: src/usr.bin/cut/cut.1 =================================================================== RCS file: /home/ncvs/src/usr.bin/cut/cut.1,v retrieving revision 1.9.2.5 diff -u -r1.9.2.5 cut.1 --- src/usr.bin/cut/cut.1 26 May 2003 12:35:35 -0000 1.9.2.5 +++ src/usr.bin/cut/cut.1 27 May 2003 07:05:05 -0000 @@ -51,8 +51,8 @@ .Op Ar .Nm .Fl f Ar list +.Op Fl S\&s .Op Fl d Ar delim -.Op Fl s .Op Ar .Sh DESCRIPTION The @@ -113,6 +113,11 @@ Output fields are separated by a single tab character. .It Fl n Do not split multi-byte characters. +.It Fl S +.Dq Squeeze +the field delimiter character - ignore +.Dq empty +fields (those between two consecutive field delimiter characters). .It Fl s Suppress lines with no field delimiter characters. Unless specified, lines with no delimiters are passed through unmodified. Index: src/usr.bin/cut/cut.c =================================================================== RCS file: /home/ncvs/src/usr.bin/cut/cut.c,v retrieving revision 1.9.2.3 diff -u -r1.9.2.3 cut.c --- src/usr.bin/cut/cut.c 30 Jul 2001 09:59:16 -0000 1.9.2.3 +++ src/usr.bin/cut/cut.c 27 May 2003 07:05:05 -0000 @@ -57,6 +57,7 @@ int dflag; int fflag; int sflag; +int Sflag; void c_cut (FILE *, const char *); void f_cut (FILE *, const char *); @@ -80,8 +81,11 @@ /* Since we don't support multi-byte characters, the -c and -b options are equivalent, and the -n option is meaningless. */ - while ((ch = getopt(argc, argv, "b:c:d:f:sn")) != -1) + while ((ch = getopt(argc, argv, "b:c:d:f:nSs")) != -1) switch(ch) { + case 'S': + Sflag = 1; + break; case 'b': case 'c': fcn = c_cut; @@ -260,11 +264,22 @@ pos = positions + 1; for (field = maxval, p = lbuf; field; --field, ++pos) { if (*pos) { + if (Sflag) + if ((ch = *p++) == sep) { + field++; + pos--; + continue; + } if (output++) (void)putchar(sep); + if (Sflag) + (void)putchar(ch); while ((ch = *p++) != '\n' && ch != sep) (void)putchar(ch); } else { + if (Sflag) + while ((ch = *p++) == sep) + continue; while ((ch = *p++) != '\n' && ch != sep) continue; } @@ -292,6 +307,6 @@ (void)fprintf(stderr, "%s\n%s\n%s\n", "usage: cut -b list [-n] [file ...]", " cut -c list [file ...]", - " cut -f list [-s] [-d delim] [file ...]"); + " cut -f list [-Ss] [-d delim] [file ...]"); exit(1); }