所以我的問題是如何計算Linux中給定字符串中每個單詞的單個字符?用Sed計算字符串中每個單詞的字符
這裏是什麼,我想實現一個例證:
$ echo "But a time I spent wandering in bloomy night;" | ...
應該給我:
314159265
3字中的人物 '但是',1爲 'A' 和等等..
所以我的問題是如何計算Linux中給定字符串中每個單詞的單個字符?用Sed計算字符串中每個單詞的字符
這裏是什麼,我想實現一個例證:
$ echo "But a time I spent wandering in bloomy night;" | ...
應該給我:
314159265
3字中的人物 '但是',1爲 'A' 和等等..
不知道你爲什麼指定sed
;計算事物並不是它的特長。這是很容易與awk
,雖然:
$ echo "But a time I spent wandering in bloomy night" |
awk '{for (i=1;i<=NF;++i) printf "%d", length($i); print ""}'
314159265
注意,在您的版本分號將被計算在內,這意味着它會錯誤地給最後一個數字爲6,而不是5.如果你想只計算字母,你可以引入sed
回到組合:
$ echo "But a time I spent wandering in bloomy night;" |
sed 's/[^a-zA-Z ]//g' |
awk '{for (i=1;i<=NF;++i) printf "%d", length($i); print ""}'
或者,你可以用shell內置做到這一切。假設你的shell是bash,這將工作:
echo "But a time I spent wandering in bloomy night;" | {
read -a pi
for d in "${pi[@]}"; do
d=${d//[^A-Za-z]}
echo -n ${#d}
done
echo; }
展望從AWK的其他方式,這是一個班輪在Perl或Ruby:
$ echo "But a time I spent wandering in bloomy night;" |
perl -lne 'print map { s/[^A-Za-z]//g; length } split'
$ echo "But a time I spent wandering in bloomy night;" |
ruby -ne 'puts $_.split.map{|w| w.gsub(/[^A-Za-z]/, "").length }.join'
+1使用'sed'而非' wc':我知道這是一個荒謬的用例,因爲當我們有'wc'時爲什麼要麻煩,但我認爲找到像'sed'這樣的不尋常的東西很有趣,即使'sed'不能實際上做什麼是在這裏問。 –