grep - सीमांकक टोकन के बाद पाठ हटा रहा है


12

मेरे पास एक फाइल है जिसमें मुझे ;हर लाइन पर पहले के बाद सब कुछ खत्म करने की आवश्यकता है ।

तो इस तरह एक फ़ाइल:

sdfsdsdf;
fsdfsddf;sdfsd;

इस में परिणाम होगा:

sdfsdsdf
fsdfsddf

मैंने grepऔर में देखा है sed। मैं इनमें से किसी भी आदेश को शामिल करते हुए उत्तर की सराहना करूंगा।

जवाबों:


5

sed संभवत: इस परिस्थिति में सबसे आसान और तेज़ है।

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
यह जितना होना चाहिए उससे अधिक जटिल है! sed 's/;.*//'
गिल्स एसओ- बुराई को रोकना '

क्षमा करें मैं असहमत हूं। perl -pe 's / /.*//' some_file_name बस के रूप में आसान है, और यकीनन बड़ी फ़ाइलों में काम करते समय 1500% तक तेजी से।
कोडहेड

मेरे पास कई प्रणालियां हैं जहां sed उपलब्ध है, लेकिन perl नहीं है, इसलिए मैं लाइटर-वेट समाधानों का उपयोग करने के लिए प्रोत्साहित करता हूं जहां वे पर्याप्त हैं।
dubiousjim

7

एक अन्य विकल्प cutकमांड का उपयोग करना है

cat a.file | cut -d';' -f1

9
बिल्ली का बेकार

3

मैं आमतौर पर awkइस तरह की चीजों के लिए उपयोग करता हूं :

cat a.file | awk -F=";" '{ print $1 }'

यह फ़ाइल की प्रत्येक पंक्ति को ले जाएगा और परिसीमन से पहले पहले समूह को प्रिंट करेगा -F


7
का बेकार उपयोग cat
अगली सूचना तक रोक दिया गया।

1
दूसरा डेनिस वहाँ। और linux और BSD के तहत कि -F = ";" इरादा के अनुसार काम नहीं करता है। और आप उस $ 1 को उद्धृत करना चाह सकते हैं, वह भी: awk -F ";" '{प्रिंट $ 1}' a.file
कोडहेड

2

यहाँ यह GNU का उपयोग करने का एक तरीका है grep:

grep -Po "^[^;]+(?=;?)" filename

गुन्नू ग्रेप के बिना: grep -Eo '^[^;]+;' filenameयह लगभग हो जाता है, यह सिर्फ एक चरित्र को बहुत अधिक प्रिंट करता है। grep -Eo '^[^;]+' filenameलगभग यह भी हो जाता है, लेकिन यह भी पूर्ण (गैर-खाली) लाइनों को प्रिंट करेगा जिसमें कोई भी नहीं है ;
डब्यूसीजिम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.