50
find, grep, sed, and awk (wilsonericn.wordpress.com)
submitted 7 months ago by [email protected] to c/[email protected]

Code and comments

all 23 comments
sorted by: hot top controversial new old
[-] [email protected] 10 points 7 months ago

I wish I could grep my car keys sometimes.

[-] [email protected] 3 points 7 months ago

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.

[-] [email protected] 2 points 7 months ago

I remember those! I think the comeback version is the Tile or AirTag but I'm too old to hear them beep.

[-] [email protected] 6 points 7 months ago

My 5 cents:

  1. 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.)

  2. 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).

  3. If you want to split a delimiter separated line and print some field, you need cut. Keep awk for more complicated tasks.

[-] [email protected] 2 points 7 months ago
  1. 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.

[-] [email protected] 1 points 7 months ago

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 with cut -f2.

[-] [email protected] 3 points 7 months ago

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.

[-] [email protected] 1 points 7 months ago

the two are valid and no one is more correct than the other sooo...

[-] [email protected] 1 points 7 months ago

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.

[-] [email protected] 5 points 7 months ago

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.

[-] [email protected] 3 points 7 months ago

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.

[-] [email protected] 2 points 7 months ago

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.

[-] [email protected] 1 points 7 months ago

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.

[-] [email protected] 0 points 7 months ago

sed is not for daily use, it is for reusable scripts. For other purposes interactive editors are more convinient.

[-] [email protected] 3 points 7 months ago

I always found "find" very confusing. Currently, I'm using "fd", which I think has a more sensible UX

[-] [email protected] 3 points 7 months ago

What software did you use to put the slide deck together? It seems to work so nicely when placed on a webpage, too...

[-] [email protected] 2 points 7 months ago

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.

[-] [email protected] 2 points 7 months ago

Way too many ads on that link for me to read the actual content.

[-] [email protected] 1 points 7 months ago

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.

[-] [email protected] 3 points 7 months ago

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.

[-] [email protected] 0 points 7 months ago

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.

[-] [email protected] 1 points 7 months ago* (last edited 7 months ago)

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.

this post was submitted on 17 Nov 2023
50 points (94.6% liked)

Linux

45523 readers
2164 users here now

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word "Linux" in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

Related Communities

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

founded 5 years ago
MODERATORS