2009-06-09 10 views
143

उदाहरण के लिए, मैं चाहते हो सकता है के लिए:लाइन के पहले एन अक्षरों को हटाने के लिए यूनिक्स कमांड क्या है?

tail -f logfile | grep org.springframework | <command to remove first N characters> 

मैं सोच रहा था कि tr ऐसा करने की क्षमता है, लेकिन मुझे यकीन है कि नहीं हूँ।

उत्तर

206

cut का उपयोग करें। उदाहरण के लिए। प्रत्येक पंक्ति के पहले 4 अक्षर पट्टी (यानी 5 वीं चार पर शुरू):

tail -f logfile | grep org.springframework | cut -c 5- 
+0

क्या आपको कोई विचार है कि पाइप क्यों काम नहीं करता है? जब मैं अनिवार्य रूप से उस आदेश को चलाता हूं, 'कट' परिणाम को stdout पर प्रिंट नहीं करता है ... अगर मैं सिर्फ 'tail -f logfile' चलाता हूं। कट-सी 5- 'मैं परिणाम देख सकता हूं ... समस्या grep के साथ होनी चाहिए मैं साइगविन एफवाईआई धन्यवाद – les2

+0

क्या होता है यदि आप अंतिम पाइप और कट नहीं जोड़ते हैं तो क्या होता है? मूल रूप से, यदि आप लाइन के अंतिम भाग को हटाते हैं? – LB40

+0

यह लॉगफाइल को "पूंछ" करता है, इसे grep (यानी, "org.springframework" के साथ सभी पंक्तियों को stdout पर मुद्रित किया जाता है) जब मैं पाइप को 'कट' में जोड़ता हूं ... यह लटकता है हालांकि, अगर मैं 'grep' को खत्म करता हूं तो 'कट' ठीक से काम करता है ... मैं कुछ गलत सोच रहा हूं कि मैं grep का उपयोग कैसे कर रहा हूं ... एक साइगविन चीज़ भी हो सकती है – les2

2
tail -f logfile | grep org.springframework | cut -c 900- 

जब मैं पाइप यह सब ग्रेप के माध्यम से मैं नहीं मिलता है पहले 900 पात्रों

cut 900 का उपयोग करता है

तथापि पंक्ति के अंत तक 900 चरित्र को दिखाने के लिए हटा कुछ भी

+4

"-c कटौती 1-900" नहीं "पहले 900 वर्णों को हटा दें" होगा - - यह केवल पहले 900 वर्ण छोड़ देगा।यदि आप पहले 900 वर्णों को हटाना चाहते हैं, तो "कट-सी 901-" – iammichael

+0

का उपयोग करें, यह प्रत्येक पंक्ति पर पहले 900 वर्ण हैं, प्रति @ iammichael के उत्तर –

30
sed 's/^.\{5\}//' logfile 

और आप नंबर आप चाहते द्वारा 5 की जगह ... यह चाल करना चाहिए ...

संपादित यदि प्रत्येक पंक्ति के लिए sed 's/^.\{5\}//g' logfile

+0

यह' sed '/ ^। \ {, 5 \} //' logfile' – user3719454

12

आप cut उपयोग कर सकते हैं:

cut -c N- file.txt > new_file.txt 

-c: पात्रों

file.txt: इनपुट फ़ाइल

new_file.txt: आउटपुट फ़ाइल एन से

N-: वर्ण समाप्त करने के लिए नई फ़ाइल में कटौती करने और उत्पादन किया जाना है।

अन्य तर्क भी हो सकते हैं: 'एन', 'एन-एम', '-एम' अर्थात् एनएच चरित्र, एनएच से एमएच चरित्र, पहले क्रमशः एमएच चरित्र के लिए।

यह इनपुट फ़ाइल की प्रत्येक पंक्ति में ऑपरेशन करेगा।

+4

'बिल्ली' का बेकार उपयोग होना चाहिए, file.txt -cN-> new_file.txt' को भी ठीक से काम करेगा – ChrisWue

1

मुझे लगता है कि awk के रूप में यह दोनों फिल्टर कर सकते हैं इसके लिए सबसे अच्छा उपकरण हो सकता है और फ़िल्टर्ड तर्ज पर आवश्यक स्ट्रिंग परिवर्तन कार्य करते हैं:

tail -f logfile | awk '/org.springframework/ {print substr($0, 6)}' 

या

tail -f logfile | awk '/org.springframework/ && sub(/^.{5}/,"",$0)' 
0

यहाँ सरल कार्य है, बैश में परीक्षण किया। समारोह के 1 परम स्ट्रिंग है, 2 परम वर्णों की संख्या

हटाया जा करने के लिए function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

प्रयोग है: enter image description here

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