2012-06-14 9 views
5

में टैब अक्षरों की संख्या गिनती है, मैं यूनिक्स शैल में अपने दस्तावेज़ों में hard tab characters की संख्या गिनना चाहता हूं।लिनक्स

मैं यह कैसे कर सकता हूं?

मैं

grep -c \t foo

की तरह कुछ करने की कोशिश की, लेकिन यह फाइल foo में टी की गिनती देता है।

+1

क्या आप टैब वर्णों की संख्या या टैब वर्णों वाली लाइनों की संख्या गिनना चाहते हैं? उदाहरण में आपने दिया, यदि '\ t' काम किया था, तो आपको बाद वाला (* टैब युक्त लाइनों की संख्या *) मिल जाएगी। –

उत्तर

12

उपयोग टीआर टैब के अलावा सब कुछ त्यागने के लिए, और उसके बाद गिनती:

grep -c $'\t' foo 
+0

आश्चर्य है कि यह कौन है और इस https://cmdchallenge.com/#/find_tabs_in_a_file :) – BenB

2

टैब वर्णों को grep करने के लिए एक perl regex (-P विकल्प) का उपयोग करें।

तो, एक फ़ाइल में टैब वर्णों की संख्या गिनती करने के लिए:

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

-P केवल जीएनयू है और यह पोस्ट लिनक्स टैग नहीं है। – jordanm

3

आप Ctrl + V + टैब के साथ उद्धरण के बीच एक शाब्दिक टैब चरित्र सम्मिलित कर सकते हैं।

सामान्य रूप से आप 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"} {प्रिंट एनएफ -1} 'foo' ('एफएस'' awk' के फील्ड विभाजक होने के नाते)। –