我需要使用Bash計算字符串中char出現次數的次數。使用Bash計算字符串中char的出現次數
在下面的示例中,當字符是(例如)t
,它echo
小號在var
正確數量的t
出現,但是當字符是逗號或分號,它打印出零:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
我需要使用Bash計算字符串中char出現次數的次數。使用Bash計算字符串中char的出現次數
在下面的示例中,當字符是(例如)t
,它echo
小號在var
正確數量的t
出現,但是當字符是逗號或分號,它打印出零:
var = "text,text,text,text"
num = `expr match $var [,]`
echo "$num"
我會用下面的命令awk
:
string="text,text,text,text"
char=","
awk -F"${char}" '{print NF-1}' <<< "${string}"
我被分割字符串並打印造成的字段數減1
如果你的shell不支持<<<
操作,使用echo
:
echo "${string}" | awk -F"${char}" '{print NF-1}'
如果var是包含文本的文件,該怎麼辦?上面怎麼能改變這個? – HattrickNZ
@HattrickNZ然後使用:'$(grep -o「$ needle」
@ hek2mgi。但是這個輸出3?!當我回聲「number_of_occurences」 – Amir
例如,你可以刪除所有其他字符和算什麼依然存在,像:
var="text,text,text,text"
res="${var//[^,]}"
echo "$res"
echo "${#res}"
將打印
,,,
3
或
tr -dc ',' <<<"$var" | awk '{ print length; }'
或
tr -dc ',' <<<"$var" | wc -c #works, but i don't like wc.. ;)
或
awk -F, '{print NF-1}' <<<"$var"
或
grep -o ',' <<<"$var" | grep -c .
或
perl -nle 'print s/,//g' <<<"$var"
[更多技巧](http://www.cyberciti.biz/faq/unix-linux-appleosx-bsd-bash-count-characters-variables/)like'y =「$ {x // [^ s | S]}「;回聲「$ {#y}」' –
使用第一個,應該總是避免使用另一個進程來執行這樣的工作,它會在使用大型迭代循環時嚴重影響性能。作爲規則,當使用迭代或重複操作時,外部流程執行應該是最後的手段。 – osirisgothra
你爲什麼不喜歡'wc'?它是高爾夫球! –
awk的效果很好,如果你的服務器有它
var="text,text,text,text"
num=$(echo "${var}" | awk -F, '{print NF-1}')
echo "${num}"
您可以通過合併tr
和wc
命令去做。例如,將字符串referee
echo "referee" | tr -cd 'e' | wc -c
輸出
4
說明在數e
:命令tr -cd 'e'
刪除不是 'E' 以外的所有字符,命令wc -c
計算剩餘的字符。
多行輸入也適用於此解決方案,如命令cat mytext.txt | tr -cd 'e' | wc -c
可以在文件mytext.txt
中計數e
,甚至認爲該文件可能包含很多行。
您的解決方案似乎是最乾淨和最容易記住的,謝謝! – jirislav
http://unix.stackexchange。com/questions/18736 /如何計算每行特定字符數 –