पहली जगह के बाद कुछ भी हटाने के लिए sed / awk का उपयोग करना


20
aaaaaaaa 09  
bbbbbbbb 90   
ccccccccccccccc  89  
ddddd 09

उपरोक्त पाठ में sed / awk / प्रतिस्थापित का उपयोग करके, मैं प्रत्येक पंक्ति में पहले स्थान के बाद आने वाली किसी भी चीज़ को निकालना चाहता हूं। उदाहरण के लिए आउटपुट होगा:

aaaaaaaa  
bbbbbbbb    
ccccccccccccccc  
ddddd 

किसी भी तरह की सहायता को आभार समझेंगे।

जवाबों:


35

एसईडी

sed 's/\s.*$//'

ग्रेप

grep -o '^\S*'

awk

awk '{print $1}'

जैसा कि टिप्पणियों में बताया गया है, -oपोसिक्स नहीं है; हालांकि GNU और BSD दोनों के पास है, इसलिए इसे ज्यादातर लोगों के लिए काम करना चाहिए।

इसके अलावा, \s/ \Sसभी प्रणालियों पर नहीं हो सकता है, अगर आपका यह नहीं जानता है कि आप शाब्दिक स्थान का उपयोग कर सकते हैं, या यदि आप स्थान और टैब चाहते हैं, तो एक ब्रैकेट अभिव्यक्ति ( [...]), या [[:blank:]]वर्ण वर्ग (ध्यान दें कि कड़ाई से बोल रहा \sहै) समतुल्य है [[:space:]]और ऊर्ध्वाधर रिक्ति वर्णों के साथ-साथ सीआर, एलएफ या वीटी भी शामिल है जिसके बारे में आपको परवाह नहीं है)।

awk एक मान लिया गया लाइनों एक रिक्त वर्ण के साथ प्रारंभ नहीं है।


14
cut -d ' ' -f 1 < your-file

सबसे कुशल होगा।


4
मैंने आपके कई जवाबों में इस पर ध्यान दिया और मुझे आश्चर्य हुआ कि क्या इसका कोई कारण है: आप हमेशा इनपुट पुनर्निर्देशन को जोड़ते हैं जब भी कमांड इसके बिना काम कर सकता है। क्या आप बता सकते हैं कि <यहाँ उपयोगी क्यों है?
जोसेफ आर।

5
@JosephR। आप cut < fileबनाम मतलब है cut file? फिर देखें unix.stackexchange.com/a/70759/22565
स्टीफन चेज़लस

कटौती इस सरल समस्याओं के लिए सबसे अच्छा समाधान हो सकता है। मैं अधिक जटिल मिलान के लिए awk (या perl) आरक्षित करूंगा।
ChuckCottrill

@StephaneChazelas (विशेषता) अंतर्दृष्टि के लिए धन्यवाद :)
जोसेफ आर।


1

और एक के माध्यम से perl,

$ perl -pe 's/^([^ ]+) .*$/\1/' file
aaaaaaaa
bbbbbbbb
ccccccccccccccc
ddddd

GNU grep के माध्यम से,

$ grep -oP '^[^ ]*' file
bbbbbbbb
ccccccccccccccc
ddddd
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.