Bash Shell Count Number of Characters In a String or Word

by on June 22, 2011 · 9 comments· LAST UPDATED June 22, 2011

in

How do I count and print particular character (say D or digit 7) in a string or variable under Bash UNIX / Linux shell?

You can use UNIX / Linux command such as sed, grep, wc or bash shell itself to count number of characters in a string or word or shell variable.

grep Command To Count Number of Characters

Use the following syntax to count 's' character in a variable called $x:

 
x="This is a test"
grep -o "s" <<<"$x" | wc -l
 

Sample outputs:

3

To match both 's' and 'S', enter:

 
x="This is a test. S"
grep -o "[s|S]" <<<"$x" | wc -l
 

Sample outputs:

4

Count Number of Characters Using Bash Only

You can use Bash parameter expansion as follows:

 
x="This is a test"
y="${x//[^s]}"
echo "$y"
echo "${#y}"
 

To match both 's' and 'S', enter:

 
x="This is a test. S"
y="${x//[^s|S]}"
echo "${#y}"
 

Please note that all instructions were tested using:

  • Debian GNU/Linux, v6.x
  • GNU grep, v2.6.3
  • GNU bash, v4.1.5
TwitterFacebookGoogle+PDF versionFound an error/typo on this page? Help us!

{ 9 comments… read them below or add one }

1 Justin Yang June 23, 2011 at 2:56 pm

Hi,
Just complete this article and feel it’s helpful to me. However, could you offer us more details about the meaning of the following two lines:
y=”${x//[^s]}”
and
echo “${#y}”
I don’t know what they mean. Thank you.

Reply

2 nixCraft June 25, 2011 at 2:01 pm

Find and replace all occurrences of ‘s’ i.e. when pattern begins with /, all matches of pattern are replaced with ‘s’ and stored to $y:

y=”${x//[^s]}”

To find string ($y) length:

echo “${#y}”

See HowTo: Use Bash Parameter Substitution Like A Pro for more info.

Reply

3 Justin Yang June 25, 2011 at 3:32 pm

Thank you for your reply with that good link you give.

Reply

4 mandela900 June 27, 2011 at 8:22 am

A=”Ciao Mondo”
echo ${#A}
10

Reply

5 nixCraft June 29, 2011 at 4:42 pm

A whitespace is also counted as a character.

Reply

6 hitendra April 11, 2013 at 3:44 pm

thanku

Reply

7 Uchmann July 14, 2011 at 8:12 am

Thanks for the post
is it wrong doing it this way.
1. Use the following syntax to count ‘s’ character in a variable called $x:
echo “$x” | grep -o “s” | wc -l

2. To match both ‘s’ and ‘S’, enter:
echo “$x” | grep -oi “s” | wc -l

Reply

8 Adilson April 6, 2013 at 3:20 pm

[Fedora Linux & Debian Linux]

hello, thanks for scripts.
I have a directory with 100 files.
I wonder which of those 100 files has more than 32 characters in the name.
can you help me?
Thanks

Reply

9 Jared June 4, 2014 at 3:10 pm

#!/usr/bin/env bash
# if $filename more than 32 then
# @param $1 directory

dir=$1

for file in “$(ls $dir)”
do
file=”${#file}”
if [ “$file” -gt “32” ]; then
echo “Filename is more than 32 chars!”
else
echo “Filename is NOT more than 32 chars!”
fi
done

Wrote this on the fly, should work.

Reply

Leave a Comment

Tagged as: , , , , ,

Previous Faq:

Next Faq: