cut
"cut out selected portions of each line of a file" - man cut
Examples
keep only the selected characters
cut is 1-indexed
$ echo {0..9}
0 1 2 3 4 5 6 7 8 9
$ echo {0..9} | cut -c 1
0
$ echo -n {0..9} | cut -c 1-5
0 1 2
$ echo -n {0..9} | cut -c 1,19
09
$ echo -n {a..z} | sed 's/ //g' | cut -c 10-20
jklmnopqrst
keep only the given field index
By default, cut works with tab delimited fields, which is not really useful. You can specify a different field delimiter with -d
$ echo {a..z} | cut -d ' ' -f 3
c
$ echo {a..z} | cut -d ' ' -f 3-10
c d e f g h i j
$ echo 'a^b^c' | cut -d'^' -f 3
c
It's not really intuitive though because every single space separates one field from the next, even if the field is null
$ echo 'a b c d' | cut -d ' ' -f 1-3
a b c
$ echo 'a  b  c  d' | cut -d ' ' -f 1-3
a  b
Using -w allows all consecutive whitespace to be treated as one separator, which is usually the desired behavior, but then the output fields are separated by tabs.
$ echo 'a  b  c  d' | cut -w -f 1-3
a       b       c
See Also
- cutis often used with- [tr](tr.md)
- [awk](awk.md)is what I usually reach for instead of- cutwhen working with words.