शब्द को सीमांकक के रूप में काटें


10

क्या किसी शब्द के आधार पर कटौती करने की कोई आज्ञा है जैसे:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27

मुझे आउटपुट चाहिए:

171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

कैसे संपर्क करें?


1
आपको किस शब्द से मतलब है?
सायरस

एबीसीडी वह शब्द है जिसे मैं सीमांकित के रूप में उपयोग करना चाहता हूं। और यह भी, यह एक लॉग है, और एबीसीडी की तरह, मुझे कुछ कीवर्ड भी मिल रहे हैं। मैं सामान्य रूप से एक दृष्टिकोण चाहता हूं
Anony

जवाबों:


16

मैं सुझाव देता हूँ:

awk -F 'ABCD' '{print $1 FS "."}' file

आउटपुट:

171212 16082784 6264 XXX xxxxxxxx लेन-देन XXXXX एबीसीडी का पालन करें।

FSआपका परिसीमन "ABCD" सम्‍मिलित है। "एबीसीडी" एक रेगेक्स है।


4

awkयदि आप -Fउस शब्द के साथ ध्वज प्रदान करते हैं , जिसे आप उपयोग करना चाहते हैं:

$ awk -F 'test'  '{print $1;print $2}'  <<<  "onetesttwotest"                                                            
one
two

आपके विशेष मामले में, यह होगा:

$ awk -F 'ABCD' '{print $1,FS}' input.txt                                                                                
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend  ABCD

अपने उदाहरण से देखते हुए, आप केवल ABCDइतना सब कुछ हटाने के लिए सामान को प्रिंट करने का प्रयास कर रहे हैं, यह भी एक विकल्प है:

$ awk '{print substr($0,0,match($0,/ABCD/)+4);}' input.txt                                                               
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

वे 'एबीसीडी' भी रखना चाहते हैं।

Yea..ABCD होनी चाहिए
Anony

मैं सुझाव देता हूं awk '{print gensub(/(.*ABCD\.).*/,"\\1",1)}'
डेसर्ट

4

sed संस्करण:

sed 's/ABCD.*/ABCD./' input.txt
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

स्रोत: /unix/257514/how-to-delete-everything-after-a-earch-pattern-or-a-string-in-a-file


मैंने इसे बदल दिया है, लेकिन क्या इससे कोई फर्क पड़ेगा?

यह अभी भी काम करेगा - केवल यह इंगित करना आवश्यक नहीं है
स्टीलड्राइवर

3

grep समाधान:

grep -o '^.*ABCD\.' input.txt

नियमित अभिव्यक्ति प्रत्येक पंक्ति से मेल खाएगी जो ^किसी भी वर्ण के .बार-बार दोहराए जाने से शुरू *होती है और स्ट्रिंग के साथ समाप्त होती है ABCD.। बैकस्लैश अंत \में डॉट के विशेष अर्थ से बच जाता है .

विकल्प कमांड को एक मिलान पंक्ति के केवल मिलान किए गए (गैर-खाली) भागों को प्रिंट करने के लिए -oबताएगा grep


3

cutखुद यह काम कर सकते हैं। एक शब्द के आधार पर नहीं, बल्कि .सीमांकक के आधार पर ।

उपयोग :

cut -f 1 -d '.' input.txt | xargs -I "%" echo %.

उत्पादन

rooney@bond-pc:~$ cat input.txt 
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD. The task has terminated abnormally because of a program check. 16:08:27
rooney@bond-pc:~$ 
rooney@bond-pc:~$ cut -f 1 -d '.' input.txt | xargs -I "%" echo %.
171212 16082784       6264 XXX     xxxxxxxx Transaction XXXXX abend ABCD.

xargsकेवल .स्ट्रिंग के अंत में संलग्न करने के लिए यहां उपयोग किया जाता है ABCD

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