user1301428
user1301428

Reputation: 1783

Regular expression to extract a percentage

I have strings like the following: blabla a13724bla-bla244 35%

Notice that there is always a space before the percentage. I would like to extract the percentage number (so, without the %) from these strings using the Linux shell.

Upvotes: 4

Views: 7061

Answers (6)

glenn jackman
glenn jackman

Reputation: 247012

Assuming you have GNU grep:

$ grep -oP '\d+(?=%)' <<< "blabla a13724bla-bla244 35%"
35

Upvotes: 5

JuanCrg90
JuanCrg90

Reputation: 1016

If you always have a number of continuous columns maybe you should try with awk instead of a regular expresion.

cat file.txt |awk '{print $3}'  |cut -d "%" -f 1

With this code you obtain the third column.

Upvotes: 0

perreal
perreal

Reputation: 98048

Using sed:

echo blabla a13724bla-bla244 35% | sed 's/.*[ \t][ \t]*\([0-9][0-9]*\)%.*/\1/'

If you expect to have multiple percentages in a line then:

echo blabla 20% a13724bla-bla244 35% | \
   sed -e 's/[^%0-9 ]*//g;s/  */\n/g' | sed -n '/%/p'

Upvotes: 3

mvp
mvp

Reputation: 116317

Use this regular expression:

\s(\d{1,3})%

If you need it in shell, you can use sed or this perl one-liner:

echo "blah 35%" | perl -pe "s/.*\s(\d{1,3})%/\1/g"
35

Upvotes: 0

Raghuram
Raghuram

Reputation: 3967

You can try this

echo "blabla a13724bla-bla244 35%" | cut -d' ' -f3 | sed 's/\%//g'

NOTE: Assumption is the input is always in this format and percentage is 3rd token separated by space.

Upvotes: 1

Aziz Shaikh
Aziz Shaikh

Reputation: 16524

You may try this regular expression:

/\s(\d+%)/

Upvotes: 0

Related Questions