लाइन के पहले N वर्णों को हटाने के लिए एक यूनिक्स कमांड क्या है?


238

उदाहरण के लिए, मैं चाहता हूँ:

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

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

जवाबों:


355

का उपयोग करें cut। उदाहरण के लिए। प्रत्येक पंक्ति के पहले 4 अक्षरों को स्ट्रिप करना

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

1
क्या आपको पता है कि पाइप काम क्यों नहीं करता है? जब मैं अनिवार्य रूप से उस कमांड को चलाता हूं, तो 'कट' स्टडआउट के परिणामों को प्रिंट नहीं करता है ... अगर मैं सिर्फ 'टेल-ऑफ लॉगफाइल चलाऊं तो? कट -c 5- 'मैं परिणाम देख सकता हूं ... समस्या मुझे grep के साथ होनी चाहिए, मैं cygwin FYI का उपयोग कर रहा हूं धन्यवाद
les2

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

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

1
ओह मैं देख रहा हूँ ... तुम पूंछ का उपयोग क्यों करते हो? बस करो grep org.springframework logfile | कट -c 5- लेकिन मुझे लगता है कि सेड अच्छे हैं :-)
LB40

6
समस्या यह है, कि क्रेप उन्हें काटने के लिए भेजने से पहले बड़ी मात्रा में बफ़र कर रहा है क्योंकि यह देख सकता है कि यह टर्मिनल पर नहीं लिख रहा है। grep --line-buffered "org.springframeworkउस समस्या को हल करने के लिए उपयोग करें ।
रानी Schuttt

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

और आप 5 नंबर को अपनी इच्छानुसार बदल सकते हैं ... यह ट्रिक करना चाहिए ...

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


29

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

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

-c: पात्र

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

new_file.txt: आउटपुट फाइल

N-: नई फ़ाइल में कट और आउटपुट होने के लिए N से अंत तक के वर्ण।

अन्य आर्ग भी हो सकते हैं जैसे: 'एन', 'एन-एम', '-एम' अर्थात एनटी कैरेक्टर, एनटी टू एमटी कैरेक्टर, पहले एमटी कैरेक्टर।

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


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

पहले 900 वर्ण हटा देगा

cut 900 का उपयोग करता है- पंक्ति के अंत में 900 वां वर्ण दिखाने के लिए

हालाँकि जब मैं grep के माध्यम से इस सब को पाइप करता हूँ तो मुझे कुछ भी नहीं मिलता है


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

यह भी प्रत्येक लाइन पर पहले 900 वर्ण हैं, प्रति @ iammichael का उत्तर
ब्लेयर कॉनरैड

1
'कट -c 900- "पहले 899 वर्णों को हटा देगा, नहीं?
छिपाई झोउ

4

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

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

या

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

1

यहाँ साधारण कार्य है, बैश में परीक्षण किया गया। फ़ंक्शन का 1 परम स्ट्रिंग स्ट्रिंग है, छठे पैरा को छीनने के लिए वर्णों की संख्या है

function stringStripNCharsFromStart { echo ${1:$2:${#1}} }

उपयोग: यहां छवि विवरण दर्ज करें


2
आप इसे $ {1: $ 2}
kdubs
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.