Hi all! I have always only used sed with s///, becouse I’ve never been able to figure out how to properly make use of its full capabilities. Right now, I’m trying to filter the output of df -h --output=avail,source to only get the available space from /dev/dm-2 (let’s ignore that I just realized df accepts a device as parameter, which clearly solves my problem).

This is the command I’m using, which works:

df -h --output=avail,source \
    | grep /dev/dm-2 \
    | sed -E 's/^[[:blank:]]*([0-9]+(G|M|K)).*$/\1/

However, it makes use of grep, and I’d like to get rid of it. So I’ve tried with a combiantion of t, T, //d and some other stuff, but onestly the output I get makes no sense to me, and I can’t figure out what I should do instead.

In short, my question is: given the following output

$ df -h --output=avail,source 
Avail Filesystem
  87G /dev/dm-2
 1.6G tmpfs
  61K efivarfs
  10M dev
...

How do I only get 87G using only sed as a filter?

EDIT:

Nevermind, I’ve figured it out…

$ df -h --output=avail,source \
    | sed -E 's/^[[:blank:]]*([0-9]+(G|M|K))[[:blank:]]+(\/dev\/dm-2).*$/\1/; t; /.*/d'
85G
  • orsetto@lemmy.dbzer0.comOP
    link
    fedilink
    arrow-up
    2
    ·
    16 hours ago

    There’s no shame in combining multiple tools, that’s what pipelines are all about

    Not at all, but some times it’s just funny

    You can select specific lines, with regex or by using a line number; or you can select multiple lines by using a comma to specify a range.

    Yep, learning this made sed even more useful to me.

    I also gave awk a try and now i know what i’ve missed all these years

    (Also, sorry for the 12 days old reply :))

    • unlawfulbooger@lemmy.blahaj.zone
      link
      fedilink
      arrow-up
      1
      ·
      11 hours ago

      I get it, sometimes you just do something for the challenge.

      It’s really great what you can accomplish when you know a little more than the bare minimum of the tools at your disposal (^^,)

      And I had the same experience after learning a bit more about awk for the fist time, hahaha.