এর জন্য অনেকগুলি সরঞ্জাম রয়েছে:
dd
আপনি যদি কোনও ফাইল বন্ধ করতে চান তবে আপনি যা ব্যবহার করতে চান - নির্ভরযোগ্যভাবে কেবলমাত্র একটি নির্দিষ্ট সংখ্যক বাইট কেবলমাত্র একটি নির্দিষ্ট সংখ্যক বার পড়ুন। এটি ফাইল স্ট্রিমগুলি ব্লক করা এবং অবরোধ মুক্ত করতে বহনযোগ্যভাবে পরিচালনা করে:
tr -dc '[:graph:]' </dev/urandom |
dd bs=32 count=1 cbs=8 conv=unblock,sync 2>/dev/null
###OUTPUT###
UI(#Q5\e
BKX2?A:Z
RAxGm:qv
t!;/v!)N
আমি উপরেও ব্যবহার করেছি tr
কারণ এটি কোনও ASCII বাইটকে অন্য যে কোনও রূপান্তর করতে পরিচালনা করতে পারে (বা এই ক্ষেত্রে কোনও স্থানের ছাপার যোগ্য অক্ষর নয় এমন কোনও ASCII বাইট মুছে ফেলতে পারে)। আজ সকালে আপনার অন্যান্য প্রশ্নের উত্তরে আমি এটি ব্যবহার করেছি , বাস্তবে, যখন আমি করেছি:
tr '>\n' '\n>' | sed 's/^>*//' | tr '\n>' '>\n'
একই রকম অনেক আছে । এই তালিকাটিতে একটি সর্বনিম্ন সাধারণ-ডিনোমিনেটর উপসেট সরবরাহ করা উচিত যার সাথে আপনি পরিচিত হতে পারেন।
তবে, আমি যদি বাইনারি ফাইলের 2.5 গিগাবাইটে টেক্সট প্রসেসিং করতে যাচ্ছিলাম তবে আমি এটি দিয়ে শুরু করতে পারি od
। এটি আপনাকে একটি octal dump
বা অন্য কয়েকটি ফর্ম্যাট দিতে পারে। আপনি সমস্ত ধরণের বিকল্প উল্লেখ করতে পারেন - তবে আমি \C
পালানো বিন্যাসে কেবল প্রতি লাইনে একটি বাইট করব :
আপনি যে ডেটা od
পাবেন সেগুলি আপনার নির্দিষ্ট সময় অন্তর নিয়মিত হবে - যেমন আমি নীচে দেখি। তবে প্রথম - আপনার প্রশ্নের উত্তর এখানে:
printf 'first\nnewline\ttab spacefoobar\0null' |
od -A n -t c -v -w1 |
sed 's/^ \{1,3\}//;s/\\$/&&/;/ /bd
/\\[0nt]/!{H;$!d};{:d
x;s/\n//g}'
উপর delimits উপরে যে সামান্য বিট \n
ewlines, \0
NULLs, \t
ABS এবং <spaces>
যখন সংরক্ষণের \C
বিভেদক জন্য পলান পংক্তি। ব্যবহৃত H
এবং x
কার্যাবলী নোট করুন - প্রতিবার sed
একটি ডিলিমিটারের সাথে মুখোমুখি হয়ে এটি এর মেমরি বাফারগুলির সামগ্রীগুলি সরিয়ে দেয়। এইভাবে sed
কেবল নির্ভরযোগ্যভাবে ফাইলটি সীমিত করতে যতটা তথ্য রক্ষা করতে হবে এবং বাফারকে ছাড়িয়ে যাবে না - যতক্ষণ না এটি প্রকৃতপক্ষে তার সীমানারগুলির মুখোমুখি হয়। তাই যতদিন এটা আছে জন্য, sed
তার ইনপুট প্রক্রিয়া চলতে থাকবে এবং od
এটি প্রদান না হওয়া পর্যন্ত এটা encounters অব্যাহত থাকবে EOF
।
যেমনটি হয়, এর আউটপুটটি এটির মতো দেখাচ্ছে:
first
\nnewline
\ttab
spacefoobar
\0null
তাই যদি আমি চাই foobar
:
printf ... | od ... | sed ... |
sed 's/foobar/\
&\
/g'
###OUTPUT###
first
\nnewline
\ttab
space
foobar
\0null
এখন আপনি যদি C
পালিয়ে যাওয়া ব্যবহার করতে চান তবে এটি বেশ সহজ - কারণ sed
এরই মধ্যে ডাবল \\
ব্যাকস্ল্যাশ এর সমস্ত একক ইনপুট ব্যাকস্ল্যাশ এড়িয়ে গেছে, তাই printf
ছাড় পেয়েছে xargs
আপনার স্পেসিফিকেশনে আউটপুট উত্পাদন করার কোনও সমস্যা নেই। তবে xargs
শেলের উদ্ধৃতিগুলি খায় তাই আপনাকে এটি আবার ডাবল উদ্ধৃত করতে হবে:
printf 'nl\ntab\tspace foobarfoobar\0null' |
PIPELINE |
sed 's/./\\&/g' |
xargs printf %b |
cat -A
###OUTPUT###
nl$
tab^Ispace $
foobar$
$
foobar$
^@null%
এটি শেল ভেরিয়েবল এবং আউটপুটটিকে অভিন্ন ফ্যাশনে সহজেই সংরক্ষণ করা যেতে পারে। শেষটি তার ইনপুটটিতে প্রতিটি অক্ষরের আগে sed
একটি \
ব্যাকস্ল্যাশ সন্নিবেশ করায় এবং এগুলিই।
এটি সর্বদা এটির আগে sed
ধরে রাখার মতো দেখতে এখানে রয়েছে :
printf 'nl\ntab\tspace foobarfoobar\0null' |
od -A n -t c -v -w1
n
l
\n
t
a
b
\t
s
p
a
c
e
f
o
o
b
a
r
f
o
o
b
a
r
\0
n
u
l
l
perl
বাpython
?