Hacker News new | ask | show | jobs
by GNOMES 982 days ago
I really need to invest more time into Sed/Awk. I typically only use them for find/replace or deleting characters/lines in my shell scripts.
6 comments

For awk, start with the book by Kernighan/Aho/Weinberger. The PDF of the first edition is freely available on archive.org, and a second edition has been announced. Chapter 2 of the first edition is only 40 pages, and describes all language features.

https://news.ycombinator.com/item?id=13451454

For sed, the best resource is likely the free "UNIX Bookshelf" from O'Reilly that can be found online; this contains a book specifically focusing on Sed and Awk.

https://freecomputerbooks.com/The-Unix-CD-Bookshelf-Version-...

The second edition is out! I started reading it last week, and it's great so far.

https://www.awk.dev/

I've shared this before, but this sed tutorial made me a pro. [0] Even if you don't use it for more complex things, you may find there are faster ways to do the things you are now.

[0]: https://www.grymoire.com/Unix/Sed.html

Edit: That said, I don't even want to start dissecting the submitted code.

Grymoire is how I learned sed, and is a fantastic quick reference for grep and regex also.
I have ebooks on GNU sed and GNU awk with plenty of examples and exercises (free to read online):

* https://learnbyexample.github.io/learn_gnused/

* https://learnbyexample.github.io/learn_gnuawk/

I also wrote TUI apps for interactive exercises (grep, sed, awk, etc): https://github.com/learnbyexample/TUI-apps

Just use Perl for one-liners. It's more powerful than sed/awk but it does pretty much everything those do.
Perl is probably overkill for 99% of one-liners and may not be available on as many environments as awk/sed are, but I advocate that folks do whatever is best for them in their environment and if that's Perl for you, rock it out!
If Perl isn’t available in the environment try ‘systemctl start oyster-farm’
This taught me awk, from an HN submission years ago: https://ferd.ca/awk-in-20-minutes.html

I've had some fun using awk to generate C# classes for an Ultima Online emulator.

awk can do much more than sed. And, with patience, you could even write a Z-machine interpreter on it as some guy did with postscript. You might have to convert the binary input to hex first with xxd/od in order to parse the opcodes in a nice way, but everything else would be simulated from awk.
> You might have to convert the binary input to hex first

If you're okay with gawk, most implementations ship with gawkextlib, which has readfile(), and you also have FIELDWIDTHS.