আমরা যে কোনও একটি sed
বা awk
সম্পূর্ণরূপে সমস্যার সমাধান করতে ব্যবহার করতে পারি ।
সহ sed
:
$ sed 's/^.\./0&/' file.txt
যখন &
প্রতিকল্পন কমান্ড (প্রতিস্থাপন অংশে ঘটে s
), ইনপুট লাইন যে কমান্ডের প্যাটার্ন অংশ মিলে যায় অংশ প্রসারিত করা হবে না।
নিয়মিত অভিব্যক্তির ^.\.
অর্থ " ( ) একটি ল্যাবরেটরি ডট ( ) এর পরে একটি স্বেচ্ছাচারিত অক্ষর ( ) এর সাথে শুরু হওয়া সমস্ত লাইন মেলে^
.
\.
"।
লাইনটি থাকলে 1.02.2017 23:40:00
, প্যাটার্নটি মিলবে এবং লাইনের শুরুতে 1.
প্রতিস্থাপন করা 01.
হবে।
সহ awk
:
awk
প্রশ্নে আংশিক কোড তৈরি করা ...
এটি যেমন বলা হয়েছে, ইনপুটটির প্রতিটি লাইনের দ্বিতীয় অক্ষরটি মুদ্রণ করবে:
$ awk '{ print substr($0, 2, 1) }' file.txt
আমরা substr($0, 2, 1)
দ্বিতীয় চরিত্রটি ফিরে আসে এবং এটি শর্ত হিসাবে ব্যবহার করতে পারি:
$ awk 'substr($0, 2, 1) == "." { ... }' file.txt
কি মধ্যে যায় { ... }
কোড যে prepends $0
, একটি শূন্য দিয়ে যা বর্তমান লাইন বিষয়বস্তু, যদি পূর্ববর্তী শর্ত সত্য:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 }' file.txt
তারপরে আমাদের নিশ্চিত করা দরকার যে সমস্ত লাইন মুদ্রিত হয়েছে:
$ awk 'substr($0, 2, 1) == "." { $0 = "0" $0 } { print }' file.txt
শর্তটি substr($0, 2, 1) == "."
অবশ্যই একটি নিয়মিত অভিব্যক্তিতে রূপান্তরিত হতে পারে ( sed
সমাধানে আমরা যেমন ব্যবহার করেছি ঠিক তেমনই অভিব্যক্তিটি ব্যবহার করি ):
$ awk '/^.\./ { $0 = "0" $0 } { print }' file.txt
কিছু লোক যারা "খাটো সবসময়ই উন্নত" বলে মনে করেন তারা লিখতেন
$ awk '/^.\./ { $0 = "0" $0 } 1' file.txt
(এবং সম্ভবত বেশিরভাগ স্পেসও সরিয়ে ফেলবে awk '/^.\./{$0="0"$0}1' file.txt
:)