如何查找以 `_` 分隔的单词的数量?

如何查找以 `_` 分隔的单词的数量?

_我想编写一个 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;
}

相关内容