Suppose I have a file with " 9%", " 22%", " 100%" and so on.
Is there a Perl (or other) regex way to turn the numbers into "009", "022", and "100" respectively?
perl -p -i -e "s/width: (\d+)%/width_\1/g;" ...
correctly returns "width_9", "width_22", and "width_100", which is okay, but if there’s a clever, yet simple way to take the \1 matched group and add in formatting, it would be nice.
>Solution :
You can use
perl -i -pe 's/width: (\d+)%/sprintf "width_%03s", $1/ge' file
Here, width: (\d+)% matches width: , then captures one or more digits into Group 1 ($1, not \1!), and a % char is also consumed right after, and the match is replaced with width_ + the reformatted number.
See the online demo:
#!/bin/bash
s='width: 9%, width: 22%, width: 100%'
perl -pe 's/width: (\d+)%/sprintf "width_%03s", $1/ge' <<< "$s"
Output:
width_009, width_022, width_100