Text Processing – Is There an Inverse Command of Cut?

cuttext processing

I like using the cut command in Linux with the -c flag. However, I'm interested in finding a command that sort of does the set inverse of cut. Essentially, given the input:

drwxrwxrwx 2 root root 4096 4096 4 20:15 bin
drwxrwxrwx 2 root root 4096 4096 4 20:15 Desktop

I would like to see everything except “4096 4 20:15”. Here is the output:

drwxrwxrwx 2 root root bin
drwxrwxrwx 2 root root Desktop

I want to be able to literally cut out between characters x and y, if that makes sense.

Any ideas? I can't imagine it'd be a hard script to write but if there already exists a command for it, I'd love to use it.

Best Answer

As others have pointed out, you should not parse the output of ls. Assuming you are using ls only as an example and will be parsing something else, there are a few ways of doing what you want:

  1. cut with -d and -f

    cut -d ' ' -f 1,2,3,4,9
    

    from man cut:

    -d, --delimiter=DELIM
          use DELIM instead of TAB for field delimiter
    
    -f, --fields=LIST
          select only these fields;  also print any line
          that contains no delimiter  character,  unless
          the -s option is specified
    

    Specifically for ls this is likely to fail since ls will change the amount of whitespace between consecutive fields to make them align better. cut treats foo<space>bar and foo<space><space>bar differently.

  2. awk and its variants split each input line into fields on white space so you can tell it to print only the fields you want:

    awk '{print $1,$2,$3,$4,$9}'
    
  3. Perl

    perl -lane 'print "@F[0 .. 3,8]"'
    
Related Question