উত্তর:
head খুব কাজ করে:
head -c 100 file # returns the first 100 bytes in the file
.. প্রথম 100 বাইট বের করুন এবং সেগুলি ফিরিয়ে আনব।
headএটির জন্য ব্যবহার সম্পর্কে কী দুর্দান্ত তা হল tailম্যাচের সিনট্যাক্স :
tail -c 100 file # returns the last 100 bytes in the file
বাইটের রেঞ্জ পেতে আপনি এগুলি একত্রিত করতে পারেন। উদাহরণস্বরূপ, একটি ফাইল থেকে দ্বিতীয় 100 বাইট পেতে , প্রথম 200 টি পড়ুন headএবং শেষ 100 পেতে লেজ ব্যবহার করুন:
head -c 200 file | tail -c 100
head, তারপরে tailশেষ 10 টি পেতে ব্যবহার করুন , যেমন:head -c 20 file | tail -c 10
আপনি বাইটের স্বেচ্ছাসেবী খণ্ডগুলি বের করতে ডিডি ব্যবহার করতে পারেন।
উদাহরণ স্বরূপ,
dd skip=1234 count=5 bs=1
এর ইনপুট থেকে তার আউটপুটে 1235 থেকে 1239 বাইট অনুলিপি করবে এবং বাকীটি ফেলে দেবে।
স্ট্যান্ডার্ড ইনপুট থেকে প্রথম পাঁচটি বাইট পেতে, করুন:
dd count=5 bs=1
মনে রাখবেন, আপনি যদি ইনপুট ফাইলের নামটি নির্দিষ্ট করতে চান তবে dd পুরানো ফ্যাশন যুক্তি পার্সিং করে থাকে, তাই আপনি এটি করবেন:
dd count=5 bs=1 if=filename
এটিও নোট করুন যে ডিডি শব্দবাচকভাবে এটি কী করেছিল তা ঘোষণা করে, যাতে তা টস করে, কর:
dd count=5 bs=1 2>&-
অথবা
dd count=5 bs=1 2>/dev/null
dd bs=1একসাথে একক চরিত্র পড়তে এবং লিখতে বাধ্য করা ডিডি, যা headগণনা বড় হওয়ার চেয়ে ধীর গতিতে হয়। যদিও এটি গণনা = 5 এর জন্য লক্ষণীয় নয়।
ddমনে হচ্ছে, কৌশলটি করবে .. চিয়ার্স!
head -cdd bs=5 count=1
মাথা :
মাথা - আউটপুট ফাইলের প্রথম অংশ
মাথা [ বিকল্প ] ... [ ফাইল ] ...
স্ট্যান্ডার্ড আউটপুটে প্রতিটি ফাইলের প্রথম 10 টি লাইন মুদ্রণ করুন। একাধিক ফাইলের সাথে প্রতিটি ফাইলের নাম দেওয়ার আগে শিরোনাম। কোনও ফাইল না দিয়ে, বা যখন ফাইল থাকে - স্ট্যান্ডার্ড ইনপুট পড়ুন।
সংক্ষিপ্ত বিকল্পগুলির জন্য দীর্ঘ বিকল্পগুলিতে বাধ্যতামূলক যুক্তিগুলি বাধ্যতামূলক।
-c , --bytes = [-] N
প্রতিটি ফাইলের প্রথম এন বাইট প্রিন্ট করে; শীর্ষস্থানীয় '-' দিয়ে, প্রতিটি ফাইলের শেষ এন বাইট ব্যতীত সমস্ত মুদ্রণ করুন
head -Line_number file_name | tail -1 |cut -c Num_of_chars
এই স্ক্রিপ্টটি নির্দিষ্ট লাইন এবং অবস্থান থেকে অক্ষরের সঠিক সংখ্যা দেয় যেমন:
head -5 tst.txt | tail -1 |cut -c 5-8
5 টি লাইনে অক্ষর দেয় এবং 5 নং লাইনের 5 থেকে 8 পর্যন্ত অক্ষর দেয়
দ্রষ্টব্য : tail -1মাথা দ্বারা প্রদর্শিত শেষ লাইনটি নির্বাচন করতে ব্যবহৃত হয়।
আপনি লাইনটি গ্রেপ করে ফেলতেও পারেন এবং উদাহরণস্বরূপ এটি কেটে ফেলতে পারেন:
grep 'পাঠ্য' ফাইলের নাম | কাটা-সি 1-5
আমি জানি 6 বছর আগে জিজ্ঞাসা করা একটি প্রশ্নের জবাব উত্তর ...
তবে আমি কয়েক ঘন্টার জন্য অনুরূপ কিছু সন্ধান করছিলাম এবং পরে এটি সন্ধান করলাম: কাট-সি ঠিক এটি করে, একটি অতিরিক্ত বোনাস সহ যা আপনি একটি অফসেটও নির্দিষ্ট করতে পারেন।
কাট-সি 1-5 হ্যালো ফিরে আসবে এবং কাট-সি 7-11 বিশ্ব ফিরে আসবে । অন্য কোন আদেশের দরকার নেই
যদিও এর জবাব বহু বছর আগে / গৃহীত হয়েছিল, বর্তমানে স্বীকৃত উত্তরটি কেবল আইসো -8859-1 এর মতো এক-বাইট-প্রতি-অক্ষর এনকোডিংয়ের জন্য, বা ভেরিয়েবল-বাইট অক্ষর সেটগুলির একক-বাইট সাবসেটের জন্য (ল্যাটিন অক্ষরের মতো) ইউটিএফ -8 এর মধ্যে)। এমনকি এর পরিবর্তে একাধিক-বাইট স্প্লাইস ব্যবহার করা কেবলমাত্র ইউটিএফ -16 এর মতো স্থির-মাল্টিবাইট এনকোডিংয়ের জন্য কাজ করবে। প্রদত্ত এখন হল UTF-8 একটি সার্বজনীন মান হচ্ছে, এবং যখন এ খুঁজছেন তার মত ভাল যে ভাষাভাষীর ভিত্তিতে করে ভাষাগুলি এই তালিকা এবং নেটিভ / মাধ্যমিক ব্যবহার দ্বারা 30 টি ভাষায় শীর্ষ এই তালিকা , এটি একটি বাতলান গুরুত্বপূর্ণ অক্ষর-শ্রেণীর ব্যবহার cut -cএবং tr/ sedসহ সাধারণ ভেরিয়েবল-বাইট অক্ষর-বান্ধব (বাইট ভিত্তিক নয়) কৌশল ।
বাইট বনাম অক্ষর সংক্রান্ত ইস্যু সম্পর্কিত দুটি সাধারণ লাতিন-কেন্দ্রিক ভুল / অনুমানের কারণে নিম্নলিখিতটি তুলনামূলকভাবে দ্বিগুণ ব্যর্থ হয়েছে ( headএকটিটির বনাম cut, অন্যটি [a-z][A-Z]বনাম [:upper:][:lower:]):
$ printf 'Πού μπορώ να μάθω σανσκριτικά;\n' | \
$ head -c 1 | \
$ sed -e 's/[A-Z]/[a-z]/g'
[[unreadable binary mess, or nothing if the terminal filtered it]]
এই (: FreeBSD 'র উপর এই কাজ জরিমানা, কিন্তু উভয় নোটটিতে cut& trগ্রিক জিএনইউ / লিনাক্স আমাকে যদিও জন্য হল UTF-8 এখনও mangled):
$ printf 'Πού μπορώ να μάθω σανσκριτικά;\n' | \
$ cut -c 1 | \
$ tr '[:upper:]' '[:lower:]'
π
আরও একটি সাম্প্রতিক উত্তর ইতিমধ্যে "কাটা" প্রস্তাব করেছিল, তবে কেবল পাশের ইস্যুতে যে এটি স্বেচ্ছাসেবক অফসেট নির্দিষ্ট করতে ব্যবহার করা যেতে পারে, সরাসরি প্রাসঙ্গিক চরিত্র বনাম বাইটস ইস্যুর কারণে নয়।
যদি আপনার cutহ্যান্ডেল নেই -cসঠিকভাবে পরিবর্তনশীল বাইট এনকোডিং সঙ্গে, "প্রথম Xঅক্ষর" (প্রতিস্থাপন Xআপনার নম্বর সহ) আপনি চেষ্টা করে দেখতে পারেন:
sed -E -e '1 s/^(.{X}).*$/\1/' -e q - যদিও এটি প্রথম লাইনে সীমাবদ্ধhead -n 1 | grep -E -o '^.{X}' - যা প্রথম লাইনে সীমাবদ্ধ এবং যদিও দুটি কমান্ড চেইন করেdd - যা ইতিমধ্যে অন্যান্য উত্তরে পরামর্শ দেওয়া হয়েছে, তবে এটি সত্যই জটিলsedএকাধিক লাইনে ছড়িয়ে থাকা অক্ষরগুলি পরিচালনা করতে উইন্ডো বাফার সহচরী সহ একটি জটিল স্ক্রিপ্ট, তবে এটি সম্ভবত এমন কিছু ব্যবহার করার চেয়ে আরও জটিল / ভঙ্গুর isddযদি আপনার trভ্যারিয়েবল-বাইট এনকোডিং সহ অক্ষর-শ্রেণি সঠিকভাবে পরিচালনা না করে তবে আপনি চেষ্টা করতে পারেন:
sed -E -e 's/[[:upper:]]/\L&/g (গনুহ-নির্দিষ্ট)printf 'Πού ' | cut -c 1কেবল
এখানে একটি সাধারণ স্ক্রিপ্ট যা ব্যবহার করে গুটিয়ে যায় dd এখানে উল্লিখিত পদ্ধতির :
#!/usr/bin/env bash
function show_help()
{
IT="
extracts characters X to Y from stdin or FILE
usage: X Y {FILE}
e.g.
2 10 /tmp/it => extract chars 2-10 from /tmp/it
EOF
"
echo "$IT"
exit
}
if [ "$1" == "help" ]
then
show_help
fi
if [ -z "$1" ]
then
show_help
fi
FROM=$1
TO=$2
COUNT=`expr $TO - $FROM + 1`
if [ -z "$3" ]
then
dd skip=$FROM count=$COUNT bs=1 2>/dev/null
else
dd skip=$FROM count=$COUNT bs=1 if=$3 2>/dev/null
fi
mkfifo /tmp/test.fifo; echo "hello world">/tmp/test.fifo & head -c 5 /tmp/test.fifoসেগুলিও গ্রহণ করে" world\n"।