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/loop0but the
\dseem 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.
\disn’t supported by BRE/ERE flavors.GNU grepsupports 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
awkand capture the first field? Likeecho "/dev/loop0: [2081]:64 (/a/path/to/afile.dat)" | awk -F: '{print $1}'Which would print
/dev/loop0That would also print the colon
Edit: missed the separator token. Sorry guys
No, because we’re telling to use
:as a separator with the -F flagThe field separator is declared to be the colon, with -F:, so the fields end and start at colons.
Why would it print the colon?




