【问题标题】:count number of tab characters in linux计算linux中制表符的数量
【发布时间】:2012-06-17 14:37:06
【问题描述】:

我想在 unix shell 的文档中计算hard tab characters 的数量。

我该怎么做?

我尝试了类似的东西

grep -c \t foo

但它给出了文件 foo 中 t 的计数。

【问题讨论】:

  • 您要计算制表符的数量还是包含制表符的行数?在您给出的示例中,如果 \t 有效,您将得到后者(包含制表符的行数)。

标签: bash unix csh grep


【解决方案1】:

使用 perl 正则表达式(-P 选项)来 grep 制表符。

所以,要计算文件中制表符的数量:

grep -o -P '\t' foo | wc -l

【讨论】:

  • -P 仅适用于 GNU,此帖子未标记 Linux。
【解决方案2】:

您可以使用 Ctrl+V+TAB 在引号之间插入文字 TAB 字符。

一般情况下,您可以通过在其前面加上 Ctrl+V 来插入任何字符;甚至控制字符,例如 EnterCtrl+C,否则 shell 会解释这些字符。

【讨论】:

    【解决方案3】:

    我的第一个想法是使用sed 去除所有非制表符,然后使用wc 计算剩余的字符数。

    < foo.txt sed 's/[^\t]//g' | wc -c
    

    但是,这也计算换行符,sed 不会触及,因为它是基于行的。所以,让我们使用tr 将所有换行符转换为空格,所以sed 是一行。

    < foo.txt tr '\n' ' ' | sed 's/[^\t]//g' | wc -c
    

    根据您的 shell 和 sed 的实现,您可能必须使用文字选项卡而不是 \t,但是,对于 Bash 和 GNU sed,上述方法有效。

    【讨论】:

      【解决方案4】:

      使用 tr 丢弃除制表符以外的所有内容,然后计数:

      < input-file tr -dc \\t | wc -c
      

      【讨论】:

      【解决方案5】:

      Bash 使用$'...' 表示法来指定特殊字符:

      grep -c $'\t' foo
      

      【讨论】:

        【解决方案6】:

        你可以用一个棘手的方式来使用awk:使用tab作为记录分隔符,那么tab字符的个数就是总记录数减1:

        ntabs=$(awk 'BEGIN {RS="\t"} END {print NR-1}' foo)
        

        【讨论】:

        • 并计算每行制表符的数量:awk 'BEGIN{FS="\t"}{print NF-1}' fooFSawk 的字段分隔符)。
        猜你喜欢
        • 2011-09-22
        • 2023-03-28
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-12
        相关资源
        最近更新 更多