The easiest way is probably without sed, which you mentioned:
df -h --output=avail /dev/dm-2| tail -n1
But purely with sed it would be something like this:
df -h --output=avail,source | sed -n ‘/\/dev\/dm-2/s!/dev/dm-2!!p’
-n
tells sed to not print lines by default
/[regex]/
selects the likes matching regex. We need to escape the slashes inside the regex.
s///
does search-and-replace, and has a special feature: it can use any character, not just a slash. So I used three exclamation points instead , so that I don’t need to escape the slashes. Here we replace the device with the empty string.
p
prints the result
Check the sed man page for more details: https://linux.die.net/man/1/sed
There’s no shame in combining multiple tools, that’s what pipelines are all about 😄.
Also there’s a different tool that I would use if I want to output a specific column:
awk
For lines matching
/dev/dm-2
print the first column.awk
splits columns on whitespace by default.But I would probably use grep+awk.
Sed is definitely a very powerful tool, which leads to complex documentation. But I really like the filtering options before using the search/replace.
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.
E.g.
/mystring/,100s/input/output/g
: in the lines starting from the first match of/mystring/
until line100
, replaceinput
withoutput