2015-11-17 3 views
7

मैं इसे vi में कैसे कर सकता हूं?vi कॉलम के केवल पहले 10 अक्षर रखें

awk -F"," awk '{print substr($1,1,10)}' 

मैं सिर्फ अपने तारीख स्तंभ (उदाहरण 2014-01-01) के पहले 10 अक्षर रखने के लिए और टाइमस्टैम्प शामिल नहीं करना चाहते हैं।

मैं awk में यह करने की कोशिश की, लेकिन मैं यह त्रुटि आई:

sed: RE error: illegal byte sequence 

मेरा मानना ​​है कि यह एक bash_profile की स्थापना त्रुटि है।

यह वही है मैं अपने bash_profile में है:

#export LANG=en_US.UTF-8 
#export LOCALE=UTF-8 

export LC_CTYPE=C 
export LANG=C 
+1

यह बेहद असंभव है कि 'awk' ने त्रुटि संदेश' sed: RE त्रुटि: अवैध बाइट अनुक्रम 'का उत्पादन किया। अपने प्रश्न को सटीक होने के लिए साफ करें और नमूना इनपुट और अपेक्षित आउटपुट दिखाएं। आप इसे 'vi' में क्यों करना चाहते हैं? –

+0

यदि आपको अपने लोकेल के साथ परेशानी है, तो आप 'LC_ALL = C awk '{प्रिंट सबस्ट्र ($ 0,1,10)}' फ़ाइल> आउटपुट 'आज़मा सकते हैं। – ryuichiro

उत्तर

9
vim में

, कार्य करें:

:%norm! 11|D 

यह आपके बफर में सभी लाइनों को प्रभावित करेगा।

यदि आपको पसंद है, तो :s यह भी काम कर सकता है।

+0

आप कॉलम निर्दिष्ट करते हैं? – jxn

+3

@jxn उपरोक्त आदेश में एक जादू संख्या '11' है। इसका क्या मतलब हो सकता है? –

+0

शायद संदर्भ में '10l'is' 11 | ' –

5
:%s/.\{,10}\zs.*// 

  • :%s/: सभी लाइनों
  • .\{,10} लिए प्रतिस्थापन लागू होते हैं: 10 बार (लालची)
  • \zs अप करने के लिए कुछ भी मेल खाते हैं: इंगित करता है मैच की शुरुआत
  • .* : शेष पंक्ति
  • से मेल करें 210: :s
  • / के पहले भाग के अंत: s के दूसरे भाग के अंत (दो / के बीच कोई बात नहीं है, क्योंकि, कुछ भी नहीं के साथ बदलें यानी हटाना)
4

पाठ का संपादन ब्लॉक नहीं है के लिए -- VISUAL BLOCK -- मोड CTRL-V के माध्यम से सुलभ (विंडोज़ पर CTRL-Q)। फिर आप अपने चयन को हटाने के लिए डी दबा सकते हैं।

या एक सरल विकल्प आदेश

:%s/\%>10c.*// 
  • \%>10c साथ - मैचों दसवें स्तंभ
  • . के बाद - किसी भी एक वर्ण से मेल खाता है, लेकिन नहीं एक अंत की लाइन
  • * - मेल खाता है 0 या पिछले से अधिक परमाणु, जितना संभव हो सके

या आप

:1,3s/\%>10c.*// 

का उपयोग कर सकते हैं यह पहली तीन पंक्तियों के लिए विकल्प होगा।

संबंधित मुद्दे