计算linux中制表符的数量

时间:2012-06-14 14:23:43

标签: bash unix csh grep

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

我该怎么做?

我试过像

这样的东西

grep -c \t foo

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

6 个答案:

答案 0 :(得分:13)

使用tr放弃除标签之外的所有内容,然后计算:

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

答案 1 :(得分:7)

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

grep -c $'\t' foo

答案 2 :(得分:3)

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

一般情况下,您可以在前缀 Ctrl + V 之前插入任何字符;甚至控制shell可以解释的 Enter Ctrl + C 等字符。

答案 3 :(得分:2)

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

因此,要计算文件中制表符的数量:

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

答案 4 :(得分:1)

你可以用一种棘手的方式使用awk:使用tab作为记录分隔符,然后tab字符的数量是记录总数减去1:

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

答案 5 :(得分:0)

我的第一个想法是使用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,上述工作。