9

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

我该怎么做?

我尝试了类似的东西

grep -c \t foo

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

4

6 回答 6

15

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

< input-file tr -dc \\t | wc -c
于 2012-06-14T15:02:59.720 回答
11

Bash 使用$'...'符号来指定特殊字符:

grep -c $'\t' foo
于 2012-06-14T15:07:17.443 回答
4

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

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

grep -o -P '\t' foo | wc -l
于 2012-06-14T14:27:16.560 回答
3

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

一般来说,您可以通过添加前缀来插入任何字符Ctrl+V;甚至控制字符,例如EnterCtrl+Cshell 会以其他方式解释的字符。

于 2012-06-14T14:29:02.547 回答
1

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

ntabs=$(awk 'BEGIN {RS="\t"} END {print NR-1}' foo)
于 2012-06-14T21:49:47.080 回答
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,上述方法有效。

于 2012-06-14T14:37:23.173 回答