[Chapter 45] 45.29 Testing Characters in a String with expr
Author: Jerry Peek, Tim O'Reilly & Mike Loukides
Date: 1998-08-04T21:55:02Z

#

| Chapter 45 Shell Programming for the Initiated |

## 45.29 Testing Characters in a String with expr

The expr (45.28) command does a lot of different things with expressions. One expression it handles has three arguments: first, a string; second, a colon (`:`); third, a regular expression (26.4). The string and regular expression usually need quotes.

expr can count the number of characters that match the regular expression. The regular expression is automatically anchored to the start of the string you're matching, as if you'd typed a `^` at the start of it in grep, sed, and so on. expr is usually run with backquotes (9.16) to save its output:

>     $ part="resistor 321-1234-00"  name="Ellen Smith"
>        ...
>     $ expr "$part" : '[a-z ]*[0-9]'  ...character position of first number
>     10
>     $ len=`expr "$name" : '[a-zA-Z]*'`
>     $ echo first name has $len characters
>     first name has 5 characters

When a regular expression matches some character(s), expr returns a zero ("true") exit status (44.7). If you want a true/false test like this, throw away the number that expr prints and test its exit status:

    /dev/null
    $ if expr "$part" : '.*[0-9]' > /dev/null
    > then echo \$part has a number in it.
    > else echo "it doesn't"
    > fi
    $part has a number in it.

- JP

45.28 Quick Reference: expr |  | 45.30 Grabbing Parts of a String