_
我想编写一个 Unix 命令,读取一个字符串并计算其中包含的单词数。在我的例子中,单词之间用(下划线) 字符分隔,而不是用空格分隔。
例如,TABLE_PERSON
包含两个单词,因此命令应该打印“2”。
我怎样才能做到这一点?
答案1
如果您的字符串不包含空格,您可以_
用空格替换(用tr
(翻译字符) 或者sed
(流编辑器)) 并使用wc
(字数)来统计单词数:
$ echo TABLE_PERSON | tr '_' ' ' | wc -w
2
或者
$ echo TABLE_PERSON | sed 's/_/ /' | wc -w
2
如果您的字符串包含不必被视为分隔符的空格(例如,如果"TABLE_PERSON 2"
算作由_
:TABLE
和分隔的两个单词PERSON 2
),您可以先使用任意字符删除空格(例如-
),然后使用相同的命令:
$ echo 'TABLE_PERSON 2' | tr ' ' '-' | tr '_' ' ' | wc -w
2
答案2
方法有很多,其中大多数都很容易弄清楚:
/bin/sh #!/bin/sh 复制代码 n=$(tr-dc“_”|wc-c) 回显 $((n+1))
/bin/sh #!/bin/sh 复制代码 tr“ _”“x”|wc-w
/usr/bin/env bash 读取-r字符串 len1=${#string} 字符串=${字符串//_/} len2=${#string} 回显 $((len1-len2+1))
/usr/bin/env perl #! 打印(标量拆分/_/,<STDIN>)。“\n”;
/usr/bin/env python3 导入系统 打印(len(sys.stdin.readline()。split("_")))
/usr/bin/env ruby 放入 gets.split(/_/).length
#包括 <stdio.h> int main(void){ int c,n = 1; 为了 (;;) { char c = getchar(); 如果 (c == EOF || c == '\n') 休息; 否则,如果(c =='_') ++; } printf("%u\n", n); 返回0; }