2013-05-23 3 views
1

Хотелось бы узнать, как подсчитать определенный символ в строке.
Для примера:bash - подсчет количества определенного символа в строке

Hey . My . Name . Is . Bash 

С полукокса "" должен возвращаться: 4

Нам сказали, что grep будет полезен, но не смог найти хороший способ сделать это.

Thanks

ответ

1

$ echo "Hey . My . Name . Is . Bash" | tr -cd . | wc -m

Я считаю, используя tr дешевле здесь.

+0

как я могу использовать эту реализацию на строки с именем слова (я хочу подсчитать, сколько раз, когда появляется символ, не разрушая исходную строку) –

+0

Вы действительно используете эхо – aragaer

+0

Спасибо, отлично работает. –

1

Существует много способов.

Как это, например:

$ echo "Hey . My . Name . Is . Bash" | grep -o "\." | wc -w 
4 

или с двойным Grep:

$ echo "Hey . My . Name . Is . Bash" | grep -o "\." | grep -c "\." 
4 
1

Try:

$ echo "Hey . My . Name . Is . Bash" | grep -o '\.' | wc -l 
4 

Pure Баш:

$ s="Hey . My . Name . Is . Bash" 
$ m=${s//[^.]/} 
$ echo ${#m} 
4 

еще один:

$ tr -C -d [\.] <<< $s | wc -c 
4 
1

В чистом Баше:

str="Hey . My . Name . Is . Bash" 
len=${#str} 
str=${str//./} 
len2=${#str} 

count=$((len-len2)) 

echo "There are $count '.' in '$str'" 

Как это работает:

  • ${#var_name} расширяется до длины значения переменной var_name
  • ${var_name//./} заменяет все вхождения . в пустой строке

Попробуйте h ere: http://ideone.com/SLkLkL

+0

Спасибо, что разместили эту ссылку, это чертовски сайт. помог мне много –

0

Вам не нужно делать это с помощью двух процессов.

Если вы хотите посчитать специальный (один) символ в строке:

kent$ echo "Hey . My . Name . Is . Bash"|awk '{print split($0,a,".")-1}' 
4 

или:

kent$ echo "Hey . My . Name . Is . Bash"|awk '{print gsub("\\.","")}' 
4 
Смежные вопросы