cat is misunderstood a lot. The purpose of cat is to combine multiple files together (it’s literally short for “concatenate”), like cat *.log to combine all log files together.
If you’re just using it for a single file, then you should just redirect the file to stdin. These two command lines behave similarly:
cat foo.txt | some-command
some-command < foo.txt
For head, tail, grep and some other commands, you can just pass in the file name directly as an argument (e.g. grep whatever foo.txt).
You’ll see cat FILE | all the time because it’s just a natural start to a pipeline. You cat FILE to see the content unfiltered before filtering it with further commands.
I still like doing cat file.txt | grep thing because I often re-run it to find something else like cat file.txt | grep thing2 - and if I do that with grep, the pattern sits awkwardly in the middle instead of at the end
catis misunderstood a lot. The purpose of cat is to combine multiple files together (it’s literally short for “concatenate”), likecat *.logto combine all log files together.If you’re just using it for a single file, then you should just redirect the file to stdin. These two command lines behave similarly:
cat foo.txt | some-commandsome-command < foo.txtFor
head,tail,grepand some other commands, you can just pass in the file name directly as an argument (e.g.grep whatever foo.txt).Also known as cat abuse.
awww what’s a cat without a head and a tail?
I guess depending on your interpretation of without it could either be “cat” or “a”.
A kernel?
uhmm no
You’ll see
cat FILE |all the time because it’s just a natural start to a pipeline. Youcat FILEto see the content unfiltered before filtering it with further commands.Fair, but in general I find it way more useful to use cat for piping.
In most cases I’ll do something like
cat file | program cat file | program | grep cat file | program | grep | cutThis gets more complicated if the file is at the end of the command.
I don’t know why anybody would disagree with this. It’s a very clean way of putting it.
It wouldn’t be at the end, since you’d still be piping into
programprogram <file | grep | cutAnd
<file program | grep | cutworks tooOh, thanks! Didn’t know that
Thanks - I didn’t know this either!
If I just want to look at the file, is there a better way than
cat foo.txt? I guess I can’t just do< foo.txtIf it’s really long, I use
less, because it breaks it up into navigable pages instead of filling your entire buffer. :)Never knew about just using < though! Cool!
Admittedly I still use
catfor this.This also works too, but it’s more verbose:
echo "$(<foo.txt)"It’s mentioned in the Bash man pages:
EDIT: I was just informed that simply
<foo.txtworks too.how in the world is this not a useless use of echo and equivalent to
<foo.txtOK, TIL you can just do
<foo.txt. I didn’t think that worked. Thanks!So close! you have to do
cat < foo.txt:-) (/s)You can use
less. There are also specialized ones for that purpose like bat.I still like doing
cat file.txt | grep thingbecause I often re-run it to find something else likecat file.txt | grep thing2- and if I do that with grep, the pattern sits awkwardly in the middle instead of at the end< file.txt grep thingalso works.is it more obtuse
yeah sure but the command is literally written for the humor.
I know, but I just wanted to mention this since a lot of new Linux users end up using cat this way :)
Is there any downside?
deleted by creator
ohhh but it’s all humor that’s the point of the post.
I mean as a new Linux user, I won’t take anything from a humor group seriously.
I would.
I’d be careful of jokes, sure, but geeks often can’t help have real discussions. Like in this very thread