Back in the 80s/90s there were keyrings that would play an alarm if they heard a whistle at a particular frequency. You're basically playing Marco Polo with your keys.
I assume they lost popularity because the batteries tended to run out at inopportune times. Batteries are better now. Maybe it's time those things made a comeback.
When piping output of find to xargs, always use -print0 option of find and -0 option of xargs. This allows processing files with any allowed characters in names (spaces, new lines etc.). (However I prefer -exec.)
There's an i command to insert a line in sed, it is better to use it instead of s/^/...\n/. It makes code more readable (if we can talk about readability of sed code, huh).
If you want to split a delimiter separated line and print some field, you need cut. Keep awk for more complicated tasks.
If you want to split a delimiter separated line and print some field, you need cut. Keep awk for more complicated tasks.
Depends on the delimiter too! For anyone else reading this, sed accepts many kinds of delimiters. sed "s@thing@thing2@g" file.txt is valid. I use this sometimes when parsing/replacing text with lots of slashes (like directory lists) so I can avoid escaping a ton of stuff.
agree with one and two and younger me would have agreed with your third point but I think I don't anymore.
yes cut is the simpler and mostly functional tool you need for those tasks.
but it is just so common to need a slight tweak or to want to substitute something or to want to do a specific regex match or weird multi character delimiter or something and you can do it all easily in awk instead of having to pipe three extra times to do everything with the simplest tool.
I've only ever found a use for sed once two decades into my career, and that was to work around a bug due to misuse of BigInt for some hash calculations in a Java component; awk remains unused. Bash builtins cover almost everything for which I find those are typically used.
That's wild to me, as I used sed all the time. Quickly and easy changes in configs? Bam sed. Don't even need to open vi when I can grep for what I need, then swap it with sed. Though I imagine more seasoned vi nerds would be able to do this faster.
If you're using find all the time, check to see if you have or can have some variant of locate installed. It indexes everything* on the system (* this is configurable) and can be queried with partial pathnames, even with regex, and it's fast.
Using un*x since the 90s, this is all I know. I like awk but it can go fucking complicated, I once maintain a 5000 lines script that was parsing csv to generate JavaScript...
At that point I'd be looking for languages that have libraries that do what I need. Both Python and Perl have online repositories full of pre-written things. Some that can read CSV and others that can spit out JSON. It's then a matter of bolting things together, which, hopefully, is a few lines of code rather than 5000.
There are even awk repositories, but I'm not sure there's a central, official one like PyPI or CPAN.
Someone used the wrong tool for the job. If an awk script gets more than a few dozen lines, it's time to use another language/tool to process that data.
In most cases extended POSIX regexes are enough and looks the same as perl regexes.
I also used perl until I needed to write highly portable scripts that can be run on systems without perl interpreter (e.g. some minimal linux containers). Simple things are also simple to do with grep/sed/awk, more complex things can be done with awk but require a longer code in comparison with perl.