cross-posted from: https://programming.dev/post/31833654
Hi,
I would like to found a regex match in a stdout
stdout
/dev/loop0: [2081]:64 (/a/path/to/afile.dat)
I would like to match
/dev\/loop\d/
and return
/dev/loop0
but the
\d
seem not working with awk … ?How to achieve this ? ( awk is not mandatory )
Use [0-9] to match the number
Or, alternatively,
[[:digit:]]
, and dont’ forget to add a quntifier+
to match multiple digits. See documentaion for details.awk '/^\/dev\/loop[[:digit:]]+/{print}'
Regex syntax and features vary between implementations.
\d
isn’t supported by BRE/ERE flavors.GNU grep
supports PCRE, so you can usegrep -oP '/dev/loop\d'
orgrep -o '/dev/loop[0-9]'
if you are matching only one digit character.I wish there was one single unifying regex standard.
(obligatory xkcd in 3…2…)
Not sure if I’m understanding, but can’t you just pipe the whole thing to
awk
and capture the first field? Likeecho "/dev/loop0: [2081]:64 (/a/path/to/afile.dat)" | awk -F: '{print $1}'
Which would print
/dev/loop0
That would also print the colon
Edit: missed the separator token. Sorry guys
The field separator is declared to be the colon, with -F:, so the fields end and start at colons.
No, because we’re telling to use
:
as a separator with the -F flagWhy would it print the colon?