2012-06-14 2 views
5

유닉스 쉘의 내 문서에서 hard tab characters의 수를 계산하고 싶습니다.리눅스에서 탭 문자 수를 카운트

어떻게하면됩니까?

나는

grep -c \t foo

처럼 뭔가를 시도했지만 파일 foo는에 t의 수를 제공합니다.

+1

탭 문자 수 또는 탭 문자가 포함 된 줄 수를 계산 하시겠습니까? 당신이 준 예제에서,'\ t'이 효과가 있었다면, 당신은 후자를 얻을 것이다. –

답변

12

사용 그럴 필요는 탭을 제외한 모든 것을 버리고, 다음 계산하려면 :

grep -c $'\t' foo 
+0

다른 사람이이 https://cmdchallenge.com/#/find_tabs_in_a_file에 대답하려고합니다 : – BenB

2

grep 탭 문자에 perl 정규식 (-P 옵션)을 사용하십시오.

그래서, 파일에 탭 문자의 수를 계산합니다 :

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

-P는 GNU 전용이며이 게시물은 Linux 태그가 없습니다. – jordanm

3

당신은 Ctrl 키 + V + TAB와 따옴표 사이에 문자 TAB 문자를 삽입 할 수 있습니다.

일반적으로 Ctrl + V 접두사를 붙이면 모든 문자를 삽입 할 수 있습니다. 과 같은 제어 문자조차 셸이 해석 할 수있는 또는 Ctrl + C을 입력하십시오.

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의 구현에 따라, 당신은 강타와 GNU sed, 위의 작품, 그러나, 대신 \t의 문자 탭을 사용 할 수 있습니다.

7

배쉬는 특수 문자를 지정하기위한 $'...' 표기법을 사용하여 사용 탭을 레코드 구분 기호로 사용하면 탭 문자 수는 총 레코드 수에서 1을 뺀 것입니다.

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

당신은 교묘 한 방법으로 AWK를 사용할 수 있습니다 :

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

그리고 한 줄에 탭 문자 수를 계산하려면 : awk BEGIN {FS = "\ t"} {print NF -1} 'foo' ('FS'는'awk'의 필드 분리 자입니다). –

관련 문제