এর জন্য অনেকগুলি সরঞ্জাম রয়েছে:
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 উপরে যে সামান্য বিট \newlines, \0NULLs, \tABS এবং <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?