我想使用Shell來統計字符串的字數。如何統計使用shell的字符串的字數
假設字符串是:
input="Count from this String"
在這裏,定界符是空間' '
和預期輸出爲4。 有,也可以在像"Count from this String "
輸入字符串尾部空格字符。
如果字符串中有尾隨空格,它應該產生相同的輸出,即4.我該怎麼做?
我想使用Shell來統計字符串的字數。如何統計使用shell的字符串的字數
假設字符串是:
input="Count from this String"
在這裏,定界符是空間' '
和預期輸出爲4。 有,也可以在像"Count from this String "
輸入字符串尾部空格字符。
如果字符串中有尾隨空格,它應該產生相同的輸出,即4.我該怎麼做?
echo "$input" | wc -w
使用wc -w來計算單詞的數量。
或按羅布麻的建議下,回聲可以來擺脫以及:
wc -w <<< "$input"
如果< < <不是由你的shell的支持,你可以試試這個變種:
wc -w << END_OF_INPUT
$input
END_OF_INPUT
您不需要像wc
這樣的外部命令,因爲您可以使用純效率更高的bash
。
轉換串入一個數組,然後計數陣列中的元素:
$ input="Count from this String "
$ words=($input)
$ echo ${#words[@]}
4
或者,使用set
到設定的位置參數,然後計算它們:
$ input="Count from this String "
$ set -- $input
$ echo $#
4
第二個變體有一個副作用,它會覆蓋位置參數,就像從命令行或傳遞給函數的參數(如果這些行位於函數中)一樣。所以請確保在使用set之後不要依賴$ 1,$ 2等 - $ input – Tuxdude 2013-02-27 20:42:08
@Tuxdude這非常重要。謝謝 – 2013-02-28 09:11:49
@dogbane由你建議的第二種解決方案對我來說工作得很好,但正如Tuxdude指出的那樣,我不能用新的解決方案替換現有的參數,因爲它會打破目前的流程。我試圖實現第一個解決方案,但不幸的是我得到錯誤:**語法錯誤:得到(,期待換行** – 2013-02-28 09:15:07
要做到這一點在純粹的避免副作用,在一個子外殼:
$ input="Count from this string "
$ echo $(IFS=' '; set -f; set -- $input; echo $#)
4
它與其它的分隔符,以及:
$ input="dog,cat,snake,billy goat,horse"
$ echo $(IFS=,; set -f; set -- $input; echo $#)
5
$ echo $(IFS=' '; set -f; set -- $input; echo $#)
2
注意使用「設置-f」即禁用bash filename expansion在子shell,所以如果主叫方希望擴大其應事先做(帽尖@ mkelement0)。
很好完成;我建議在每個'set'命令前加上'set -f;'(注意:必須是_separate_命令),以便(暫時)禁用路徑名擴展,這樣可以確保輸入令牌(如*)不會意外擴展 – mklement0 2014-04-11 04:21:22
嘗試使用以下的一行:
echo $(c() { echo $#; }; c $input)
它基本上定義c()
函數並傳遞$input
作爲參數,然後返回$#
在由空格隔開的參數元素的個數。要更改分隔符,您可以更改IFS
(一個特殊變量)。
我就附和一個Perl一行代碼(避免 '沒用使用echo'):
perl -lane 'print scalar(@F)' <<< $input
爲什麼downvote的問題?或者這是否意味着如果某人不知道某事並且其他人知道這一點,那麼他們可以簡單地冷靜下來。 – 2013-02-27 09:33:58