ধরুন আপনার কাছে এই ফাইলটি রয়েছে:
$ cat /tmp/test.txt
Line 1
Line 2 has leading space
Line 3 followed by blank line
Line 5 (follows a blank line) and has trailing space
Line 6 has no ending CR
এখানে চারটি উপাদান রয়েছে যা বহু বাশ সমাধান দ্বারা পঠিত ফাইল আউটপুটটির অর্থকে পরিবর্তিত করবে:
- ফাঁকা লাইন 4;
- দুটি লাইনে ফাঁকা স্থানগুলি শীর্ষস্থানীয়;
- পৃথক রেখার অর্থ বজায় রাখা (অর্থাত্ প্রতিটি লাইনই একটি রেকর্ড);
- The লাইনটি কোনও সিআর দিয়ে শেষ করা হয়নি।
যদি আপনি ফাঁকা লাইন এবং সিআর ছাড়াই সমাপ্ত লাইনগুলি সহ লাইনের মাধ্যমে পাঠ্য ফাইল লাইনটি চান তবে আপনাকে অবশ্যই একটি লুপ ব্যবহার করতে হবে এবং চূড়ান্ত লাইনের জন্য আপনার বিকল্প পরীক্ষা করতে হবে।
এখানে ফাইলগুলি পরিবর্তন করতে পারে এমন পদ্ধতিগুলি (কীসের তুলনায়) cat
ফেরত ):
1) শেষ লাইনটি হারিয়ে এবং শীর্ষস্থানীয় এবং পিছনের স্থানগুলি:
$ while read -r p; do printf "%s\n" "'$p'"; done </tmp/test.txt
'Line 1'
'Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space'
(আপনি যদি এর while IFS= read -r p; do printf "%s\n" "'$p'"; done </tmp/test.txt
পরিবর্তে করেন তবে আপনি নেতৃস্থানীয় এবং পিছনের স্থানগুলি সংরক্ষণ করেন তবে সিআর দিয়ে শেষ না হলে এটি শেষ লাইনটি হারাবেন)
2) প্রক্রিয়া বিকল্প ব্যবহার করে cat
ইচ্ছার পুরো ফাইলটি এক ঝাঁকুনিতে পড়ে এবং স্বতন্ত্র লাইনের অর্থ হারাবে:
$ for p in "$(cat /tmp/test.txt)"; do printf "%s\n" "'$p'"; done
'Line 1
Line 2 has leading space
Line 3 followed by blank line
Line 5 (follows a blank line) and has trailing space
Line 6 has no ending CR'
(আপনি মুছে ফেলেন "
থেকে $(cat /tmp/test.txt)
আপনি বরং এক নি: শ্বাসে চেয়ে শব্দ ফাইল শব্দ করে পড়ুন। এছাড়াও সম্ভবত কি না দেয়ার উদ্দেশ্যে করা হচ্ছে ...)
একটি ফাইল লাইন বাই লাইন পড়ার এবং সমস্ত ব্যবধান সংরক্ষণ করার সবচেয়ে মজাদার এবং সহজতম উপায়:
$ while IFS= read -r line || [[ -n $line ]]; do printf "'%s'\n" "$line"; done </tmp/test.txt
'Line 1'
' Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space '
'Line 6 has no ending CR'
আপনি যদি শীর্ষস্থানীয় এবং ট্রেডিং স্পেসগুলি ছাঁটাই করতে চান তবে IFS=
অংশটি সরিয়ে দিন :
$ while read -r line || [[ -n $line ]]; do printf "'%s'\n" "$line"; done </tmp/test.txt
'Line 1'
'Line 2 has leading space'
'Line 3 followed by blank line'
''
'Line 5 (follows a blank line) and has trailing space'
'Line 6 has no ending CR'
একটি সসীম ছাড়া (একটি টেক্সট ফাইল \n
, যখন মোটামুটি সাধারণ, POSIX অধীনে ভাঙ্গা বিবেচনা করা হয়। আপনি trailing উপর নির্ভর করতে পারেন \n
আপনি প্রয়োজন নেই || [[ -n $line ]]
যেwhile
লুপে ))
বেস FAQ এ আরও