BASH में 'कट' के साथ 'टैब' सीमांकक को कैसे परिभाषित करें?


214

यहाँ cutएक अंतरिक्ष सीमांकक का उपयोग करके क्षेत्रों में इनपुट को तोड़ने और दूसरे क्षेत्र को प्राप्त करने का उपयोग करने का एक उदाहरण है :

cut -f2 -d' '

स्पेस के बजाय सीमांकक को टैब के रूप में कैसे परिभाषित किया जा सकता है?



4
टैब एक डिफ़ॉल्ट सीमांकक है। कट -फ 2
मेला

जवाबों:


300

दो तरीके:

Ctrl+ Vऔर फिर दबाएँ Tab

cut -f2 -d'   ' infile

या इसे इस तरह लिखें:

cut -f2 -d$'\t' infile

10
$ '' - बैशइज्म,
एएफएआईआर

8
न तो विंडोज में काम करता है (जैसे, गिट बश) स्पष्ट रूप से। @ मिकेल के उत्तर का उपयोग करें (डिफ़ॉल्ट सीमांकक टैब है, बस -dतर्क छोड़ें )।
अहमद फ़सीह


4
@ छोटा, कि से आता है ksh93, नहीं bash। यह ksh93, zsh, bash, mksh और FreeBSD sh द्वारा कम से कम समर्थित है ( यह इसे POSIX मानक विनिर्देश के अगले प्रमुख प्रत्यावर्तन के लिए बना सकता हैsh )।
स्टीफन चेज़लस

3
@micurb वह ANSI-C उद्धृत कर रहा है: gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
wisbucky

190

टैब डिफ़ॉल्ट है।

कट मैन पेज देखें ।

-d delim
         Use delim as the field delimiter character instead of the tab
         character.

इसलिए आपको बस लिखना चाहिए

cut -f 2

2
उफ़ उस लाइन पर ध्यान नहीं दिया।
मुहम्मद हसन खान

4
लेकिन पठनीयता और सुवाह्यता दोनों के लिए इस तरह के झंडे का उल्लेख करना हमेशा सुरक्षित होता है। मैं सोच सकता हूं कि cutविंडोज के लिए डिजाइन करने वाले कुछ लोग पूर्ण मानक का पालन नहीं करेंगे।
विलेम वान ओन्सेम

3
इसका उत्तर स्वीकार किया जाना चाहिए: सरलतम कोड, सरलतम स्पष्टीकरण। फिर इसे
नंगा

5
इस जवाब ने मेरी जिंदगी बदल दी है
matheeeny

1
@WillemVanOnsem, अगर कोई cutविंडोज के लिए संस्करण लिखता है और इसके लिए POSIX विनिर्देश का पालन नहीं करता है, तो यह मानने का कोई कारण नहीं है कि कोई POSIX स्क्रिप्ट उस प्रणाली के साथ काम करेगी। POSIX- निर्दिष्ट सुविधाओं के लिए छड़ी। काल्पनिक भविष्य के गैर-अनुपालन कार्यान्वयन के लिए अनुमति देने का प्रयास न करें; यह "पोर्टेबिलिटी" का मतलब नहीं है।
वाइल्डकार्ड

12
awk -F '\t' '{ print $2 }' inputfile

यह इनपुट की प्रत्येक पंक्ति के दूसरे टैब-सीमांकित फ़ील्ड को निकालता है inputfile


10

बिना किसी अदृश्य वर्ण की आवश्यकता के, और अधिक उदारतापूर्वक: trसीमांकक को एक ऐसे प्रारूप में बदलने के लिए उपयोग करें जिसे अधिक आसानी से निर्दिष्ट किया जा सकता है cut

$ echo -e "a\tb\tc" |tr '\t' ' ' |cut -d' ' -f2
b

tr एक सरल, लेकिन शक्तिशाली, चरित्र मिलान और प्रतिस्थापन उपकरण है।


1
लेकिन इनपुट क्या है abc(space)def(tab)ghi? आपका जवाब होगा def, लेकिन यह उपज चाहिए ghi। इसी तरह, यदि इनपुट है ABC(tab)DEF(space)GHI, तो आपका जवाब होगा DEF, लेकिन यह उपज चाहिए DEF(space)GHI
जी-मैन

@ जी-मैन: अंतरिक्ष परिसीमन केवल एक उदाहरण था। आपके डेटा के लिए जो भी सीमांकक उपयुक्त है उसका उपयोग करें - उदाहरण के लिए अल्पविराम। echo -e "abc\tdef ghi" |tr '\t' ',' |cut -d',' -f2
नोबार

... लेकिन, हाँ, अगर सीमांकक एक टैब होना चाहिए, तो मेरा दृष्टिकोण काम नहीं करेगा।
नोबार
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.