একটি উপায় হবে:
$ perl -lne 's/^/\n/ if $.>1 && /^\d+/; printf "%s",$_' file
20141101 server contain dump
20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdlsddsfd jfkdfk
20141101 server contain dump
তবে .এটি চূড়ান্ত নতুন লাইনটিও সরিয়ে দেয়। এটি আবার যুক্ত করতে, ব্যবহার করুন:
$ { perl -lne 's/^/\n/ if $.>1 && /^\d+/; printf "%s",$_' file; echo; } > new
ব্যাখ্যা
এটি -l
ট্রেলিং করা নতুনলাইনগুলি সরিয়ে ফেলবে (এবং প্রতিটি print
কলটিতে আমি একটি যুক্ত করব যার কারণে আমি এর printf
পরিবর্তে ব্যবহার করি , তারপরে, যদি বর্তমান লাইনটি সংখ্যাগুলির সাথে শুরু হয় /^\d+/
) ( ) এবং বর্তমান লাইন নম্বরটি একের বেশি হয় ( $.>1
, এটি অতিরিক্ত যুক্ত এড়াতে প্রয়োজন শুরুতে খালি লাইন), একটি যোগ \n
লাইনের শুরুতে। printf
প্রতিটি লাইনে ছাপে।
বিকল্পভাবে, আপনি সমস্ত \n
অক্ষর এতে পরিবর্তন করতে পারেন \0
, তারপরে \0
সংখ্যার স্ট্রিংয়ের আগে যেগুলি সঠিক তা \n
আবার পরিবর্তন করতে পারেন :
$ tr '\n' '\0' < file | perl -pe 's/\0\d+ |$/\n$&/g' | tr -d '\0'
20141101 server contain dump
20141101 server contain nothing {uekdmsam ikdas jwdjamc ksadkek} ssfjddkc * kdlsdlsddsfd jfkdfk
20141101 server contain dump
এটি কেবল 8 টি সংখ্যার স্ট্রিংয়ের সাথে মেলে তৈরি করতে, পরিবর্তে এটি ব্যবহার করুন:
$ tr '\n' '\0' < file | perl -pe 's/\0\d{8} |$/\n$&/g' | tr -d '\0'