সীমানা হিসাবে শব্দ দিয়ে কমান্ড কাটা


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
কোন শব্দটির অর্থ?
সাইরাস

এবিসিডি হ'ল শব্দটি যা আমি ডিলিমিটার হিসাবে ব্যবহার করতে চাই। এবং এছাড়াও, এটি একটি লগ এবং এবিসিডি এর মতো আমারও অন্য কীওয়ার্ড রয়েছে। আমি সাধারণভাবে একটি পন্থা চাই
অ্যানি

উত্তর:


16

আমার পরামর্শ:

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

আউটপুট:

171212 16082784 6264 এক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএক্সএবিসিডি অনুপস্থিত।

FSআপনার ডিলিমিটার "এবিসিডি" রয়েছে। "এবিসিডি" একটি রেজেক্স।


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- certain- pattern- or- a- string- in- a- file


আমি এটি পরিবর্তন করেছি, তবে এটি কোনও পার্থক্য করবে?

এটি এখনও কাজ করবে - কেবল এটি নির্দেশ করে এটি প্রয়োজনীয় নয়
স্টিল্ড্রাইভার

2

grep সমাধান:

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

নিয়মিত অভিব্যক্তি প্রতিটি লাইনের ^সাথে মিলবে যা কোনও অক্ষরের সাথে .বারবার সংখ্যায় শুরু হয় *এবং স্ট্রিংয়ের সাথে শেষ হয় ABCD.ব্যাকস্ল্যাশ শেষে \ডটের বিশেষ অর্থটি ছাড়িয়ে যায় .

অপশনটি কমান্ডকে কেবল একটি ম্যাচিং লাইনের সাথে ম্যাচ করা (খালি নয়) অংশ মুদ্রণ -oকরতে বলবে grep


2

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.