2012-06-14 41 views
5

我想在我的UNIX shell中的文檔中統計hard tab characters的數字。計數linux中製表符的字符數

我該怎麼辦?

我想是這樣

grep -c \t foo

但它給的T計數文件foo。

+1

你想計算選項卡字符的數量還是包含選項卡字符的行數?在你給出的例子中,如果'\ t'已經工作,你會得到後者(*包含標籤*的行數)。 –

回答

12

使用TR放棄一切,除了標籤,再算上:

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

不知道還有誰在這裏尋找回答這個https://cmdchallenge.com/#/find_tabs_in_a_file :) – BenB

2

使用perl正則表達式(-P選項)grep製表符字符。

所以,要計算的標籤字符數在文件:

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

-P只是GNU,這篇文章沒有標籤Linux。 – jordanm

3

您可以將引號之間的文字製表符與按Ctrl + V + TAB

一般而言,您可以插入任何字符,前綴爲Ctrl + V;甚至可以控制字符,如輸入Ctrl + C shell將以其他方式解釋。

0

我的第一個想法是使用sed去除所有非製表符,然後使用wc來計算剩餘的字符數。

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

然而,這也算換行,這sed不會觸及,因爲它是基於行的。因此,讓我們使用tr將所有換行符翻譯爲空格,因此它是sed的一行。

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

根據您的外殼和實施sed,您可能需要使用文字標籤,而不是\t,然而,與Bash和GNU sed,上述作品。

7

Bash使用一個$'...'符號用於指定特殊字符:

grep -c $'\t' foo 
1

您可以在一個取巧的辦法用awk:使用選項卡作爲記錄分隔符,那麼製表符的數量就是總記錄數減1:

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

並計算每行標籤字符的數量:'awk'BEGIN {FS =「\ t」} {print NF -1}'foo'('FS'是'awk'的字段分隔符)。 –