我想在unix shell中计算文档中hard tab characters
的数量。
我该怎么做?
我试过像
这样的东西 grep -c \t foo
但它会在文件foo中给出t的计数。
答案 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
,上述工作。