Code and comments
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.
find and grep see heavy daily use.
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 oflocate
installed. It indexes everything* on the system (* this is configurable) and can be queried with partial pathnames, even with regex, and it’s fast.I use locate when I don’t know where the files are. Find has finer controls and can differentiate between regular files, links, directories, etc.
sed
is not for daily use, it is for reusable scripts. For other purposes interactive editors are more convinient.
My 5 cents:
-
When piping output of
find
toxargs
, always use-print0
option offind
and-0
option ofxargs
. 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 insed
, it is better to use it instead ofs/^/...\n/
. It makes code more readable (if we can talk about readability ofsed
code, huh). -
If you want to split a delimiter separated line and print some field, you need
cut
. Keepawk
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.I know, but it is not the case I was talking about. I meant widely used commands like
awk '{print $2}'
that can be replaced withcut -f2
.I know you know, as you already demonstrated your higher understanding. I just wanted to add a little bonus trick for anyone reading that doesn’t know, and is learning from your examples.
the two are valid and no one is more correct than the other sooo…
-
What software did you use to put the slide deck together? It seems to work so nicely when placed on a webpage, too…
I don’t know what OP used, but it could be any one of the Markdown presentation tools.
I like reveal.js
Your presentation can go in git, looks good anywhere, and easily shared. It’s just html rendered.
Way too many ads on that link for me to read the actual content.
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.
I always found “find” very confusing. Currently, I’m using “fd”, which I think has a more sensible UX
I’ve gotten tired of weird regex stuff in awk, sed, and grep, so I’ve moved to perl -E for all but the most basic of things.
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.
I’ve dealt with systems that lack sed and awk. Bash builtins and other standard tools like cut and tr take care of … well, everything.
Systems with bash but without standard POSIX utils? I know some without bash (freebsd by default, busybox based distros etc.) and with grep, sed and awk, but not vice versa.
How is extended regex less weird than normal regex?